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)00000007; int rightCount = InversePairsCore(array,copy,mid+1,high)00000007; 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)00000007; } }