就是归并排序,只是在排序过程中加入count
public class Solution {
public int InversePairs(int [] array) {
if(array.length==0){
return 0;
}
int count=0;
int[] temp=new int[array.length];
for(int i=0;i<array.length;i++){
temp[i]=array[i];
}
count=counter(array,temp,0,array.length-1);
return count%1000000007;
}
public int counter(int[] array,int[] temp,int start,int end){
if(start==end){
temp[start]=array[start];
return 0;
}
int length=(end-start)/2;
int left=counter(temp,array,start,start+length)%1000000007;
int right=counter(temp,array,start+length+1,end)%1000000007;
int index=end;
int count=0;
int i=start+length;
int j=end;
while(i>=start&&j>=start+length+1){
if(array[i]>array[j]){
temp[index--]=array[i--];
count+=j-start-length;
count=count%1000000007;
}
else{
temp[index--]=array[j--];
}
}
for(;i>=start;--i){
temp[index--]=array[i];
}
for(;j>=start+length+1;--j){
temp[index--]=array[j];
}
return (left+right+count)%1000000007;
}
}