|
@@ -0,0 +1,22 @@
|
|
|
+class Solution {
|
|
|
+ private int[] aux;
|
|
|
+
|
|
|
+ public int reversePairs(int[] nums) {
|
|
|
+ aux = new int[nums.length];
|
|
|
+ return mergeSort(nums, 0, nums.length - 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ private int mergeSort(int[] nums, int beg, int end) {
|
|
|
+ int res = 0;
|
|
|
+ if (beg <= end) return res;
|
|
|
+ int mid = beg + (end - beg) / 2;
|
|
|
+ res += mergeSort(nums, beg, mid);
|
|
|
+ res += mergeSort(nums, mid + 1, end);
|
|
|
+ for (int i = beg, j = mid + 1; i <= mid; i++) {
|
|
|
+ for (; j < end && 2 * nums[j] < nums[i]; j++);
|
|
|
+ res += j - mid - 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+}
|