《剑指offer》JZ35数组中的逆序对
解析:这个题题目太长了
①首先一个取模看蒙了:取模可以看做是取余,两者的不同点在于对负整数的处理:举例说明:a=-7,b=4,取模:-1,商为-2;取余-3,商为-1
②本题的正式解析,我觉得应该看这个https://blog.****.net/lym940928/article/details/91354887
博主给的解析很完整,因此这里给出Java代码:
代码:
public class Solution {
int count;
public int InversePairs(int [] array) {
if(array.length != 0){
divide(array, 0, array.length-1);
}
return count;
}
private void divide(int[] array, int start, int end){
//递归的终止条件
if(start >= end){
return;
}
//计算中间值
int mid = start + (end - start)/2;
//递归分
divide(array, start, mid);
divide(array, mid+1, end);
//治
merge(array, start, mid, end);
}
private void merge(int[] array, int start, int mid, int end){
int[] temp = new int[end - start + 1];
int i = start, j = mid + 1, k = 0;
while(i <= mid && j <= end){
if(array[i] < array[j]){
temp[k++] = array[i++];
}else{
temp[k++] = array[j++];
count = (count + mid - i + 1)%1000000007;
}
}
while(i <= mid){
temp[k++] = array[i++];
}
while(j <= end){
temp[k++] = array[j++];
}
for(k = 0; k < temp.length; k++){
array[start + k] = temp[k];
}
}
}