在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
归并排序:
public class Solution {
int count=0;
public int InversePairs(int [] array) {
if(array.length==0){
return 0;
}
mergeSort(array,0,array.length-1);
return count;
}
public void mergeSort(int[] arr,int l,int r){
if(l<r){
int mid=l+((r-l)>>1);
mergeSort(arr,l,mid);
mergeSort(arr,mid+1,r);
merge(arr,l,mid,r);
}
}
public void merge(int[] arr,int l,int mid,int r){
int[] help=new int[r-l+1];
int i=0;
int p1=l;
int p2=mid+1;
while(p1<=mid&&p2<=r){
if(arr[p1]<arr[p2]){
help[i++]=arr[p1++];
}else{
help[i++]=arr[p2++];
count+=mid-p1+1;
count%=1000000007;
}
}
while(p1<=mid){
help[i++]=arr[p1++];
}
while(p2<=r){
help[i++]=arr[p2++];
}
for(int data:help){
arr[l++]=data;
}
}
}