暴力
public class Solution {
public int InversePairs(int [] array) {
int mod = 1000000007;
long res = 0;
for (int i = 0; i < array.length; i++){
for (int j = i + 1; j < array.length; j++){
if (array[i] > array[j]){
res++;
res %= mod;
}
}
}
return (int) res;
}
}
分治
public class Solution {
int mod = 1000000007;
public int InversePairs(int [] array) {
int n = array.length;
int[] res = new int[n];
return mergeSort(0, n - 1, array, res);
}
private int mergeSort(int left, int right, int[] oldData, int[] newData){
if (left >= right){
return 0;
}
int mid = (left + right) >> 1;
int res = mergeSort(left, mid, oldData, newData) + mergeSort(mid + 1, right, oldData, newData);
res %= mod;
int i = left, j = mid + 1;
for (int k = left; k <= right; k++){
newData[k] = oldData[k];
}
for (int k = left; k <= right; k++){
if (i == mid + 1){
oldData[k] = newData[j++];
} else if (j == right + 1 || newData[i] <= newData[j]) {
oldData[k] = newData[i++];
} else {
oldData[k] = newData[j++];
res += mid - i + 1;
}
}
return res % mod;
}
}