@@ -23,3 +23,44 @@ function sortSubArr(arr, s, e) {
23
23
tmp . sort ( ( a , b ) => a - b ) ;
24
24
arr . splice ( s , e - s , ...tmp ) ;
25
25
}
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