1.
2.
public class Solution {
public int InversePairs(int [] array) {
if(array==null||array.length==0)
{
return 0;
}
int[] copy = new int[array.length];
for(int i=0;i<array.length;i++)
{
copy[i] = array[i];
}
int count = InversePairsCore(array,copy,0,array.length-1);//数值过大求余
return count;
}
private int InversePairsCore(int[] array,int[] copy,int low,int high){
if(low==high) {
return 0;
}
int mid = (low+high)>>1;
int leftCount = InversePairsCore(array,copy,low,mid)%1000000007;
int rightCount = InversePairsCore(array,copy,mid+1,high)%1000000007;
int index1=low,index2=mid+1;
int index=0,count=0;
while(index1<=mid && index2<=high){
if(array[index1]>array[index2]){
count += mid-index1+1;
copy[index++] = array[index2++];
if(count>=1000000007){//数值过大求余
count%=1000000007;
}
}else{
copy[index++] = array[index1++];
}
}
while(index1<=mid){
copy[index++]=array[index1++];
}
while(index2<=high){
copy[index++]=array[index2++];
}
for(int k=0;k<=high-low;k++){
array[k+low] = copy[k];
}
return (leftCount+rightCount+count)%1000000007;
}
}