文章目录
1. 题目
2. 思路
(1) 归并排序
- 左右两数组归并时,若右边数组的元素能排在前面,则统计左边数组中尚未进行排序的元素即可。
3. 代码
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public int[] array;
public int count;
public int InversePairs(int[] array) {
this.array = array;
count = 0;
merge(0, array.length - 1);
return count;
}
public int[] merge(int left, int right) {
if (left == right) {
return new int[]{array[left]};
}
int mid = left + ((right - left) >> 1);
int[] leftArray = merge(left, mid);
int[] rightArray = merge(mid + 1, right);
int[] mergeArray = new int[right - left + 1];
int l = 0;
int r = 0;
for (int i = 0; i < mergeArray.length; i++) {
if (l == leftArray.length) {
mergeArray[i] = rightArray[r];
r++;
} else if (r == rightArray.length) {
mergeArray[i] = leftArray[l];
l++;
} else if (leftArray[l] <= rightArray[r]) {
mergeArray[i] = leftArray[l];
l++;
} else {
mergeArray[i] = rightArray[r];
r++;
count += leftArray.length - l;
count %= 1000000007;
}
}
return mergeArray;
}
}