public class SolutionInv {
public Integer count = 0;
public Integer InversePairs(int [] array) {
divMerge(array, 0, array.length - 1);
return count;
}
public void divMerge(int [] array, int left, int right) {
if(left>=right) return;
// 找到划分点 中点
int middle = left + (right - left) / 2;
// 分左边
divMerge(array, left, middle);
// 分右边
divMerge(array, middle + 1, right);
// 合并 Middle 左右两边的
int i = left;
//int j = middle + 1;
int j = middle + 1;
int [] tmp = new int[right - left + 1];
int k = 0;
while (i<=middle && j <= right) {
if (array[i] > array[j]) {
// 左边出现一个arr[i] 比右边arr[j]的大 则arr[i]之后的都比 arr[j]大
count += (middle - i + 1);
count %= 1000000007;
tmp[k++] = array[j++];
} else {
tmp[k++] = array[i++];
}
}
while (j <= right) {
// 如果右边的走完了 就把左边的放到tmp后面
tmp[k++] = array[j++];
}
while (i <= middle) {
// 如果左边的走完了 就把右边的放到tmp后面
tmp[k++] = array[i++];
}
// 把排好序的tmp 移到 array中
for(int l=0; l<k; l++) {
array[left++] = tmp[l];
}
System.out.println(JSON.toJSONString(array));
}
}



京公网安备 11010502036488号