Skip to content

Commit 4b35d9e

Browse files
authored
Update 493-reverse-pairs.js
1 parent 0f6362a commit 4b35d9e

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

493-reverse-pairs.js

+41
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,44 @@ function sortSubArr(arr, s, e) {
2323
tmp.sort((a, b) => a - b);
2424
arr.splice(s, e - s, ...tmp);
2525
}
26+
27+
// another
28+
29+
/**
30+
* @param {number[]} nums
31+
* @return {number}
32+
*/
33+
function merge(A, start, mid, end) {
34+
let n1 = mid - start + 1
35+
let n2 = end - mid
36+
const L = new Array(n1).fill(0)
37+
const R = new Array(n2).fill(0)
38+
39+
for (let i = 0; i < n1; i++) L[i] = A[start + i]
40+
for (let j = 0; j < n2; j++) R[j] = A[mid + 1 + j]
41+
let i = 0,
42+
j = 0
43+
for (let k = start; k <= end; k++) {
44+
if (j >= n2 || (i < n1 && L[i] <= R[j])) A[k] = L[i++]
45+
else A[k] = R[j++]
46+
}
47+
}
48+
49+
function mergesort_and_count(A, start, end) {
50+
if (start < end) {
51+
let mid = ((start + end) >> 1)
52+
let count =
53+
mergesort_and_count(A, start, mid) + mergesort_and_count(A, mid + 1, end)
54+
let j = mid + 1
55+
for (let i = start; i <= mid; i++) {
56+
while (j <= end && A[i] > A[j] * 2) j++
57+
count += j - (mid + 1)
58+
}
59+
merge(A, start, mid, end)
60+
return count
61+
} else return 0
62+
}
63+
64+
function reversePairs(nums) {
65+
return mergesort_and_count(nums, 0, nums.length - 1)
66+
}

0 commit comments

Comments
 (0)