题目
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
思路
int[] aux;
int count=0;
public int InversePairs(int [] array) {
int n = array.length;
aux = new int[n];
sort(array,0,n-1);
return count;
}
public void sort(int[] a, int lo, int hi){
if(lo>=hi)
return;
int mid = (lo+hi)/2;
sort(a,lo,mid);
sort(a,mid+1,hi);
merge(a,lo,mid,hi);
}
public void merge(int[] a, int lo, int mid, int hi){
int i = lo, j = mid+1;
for(int k=lo; k<=hi; k++){
aux[k] = a[k];
}
for(int k=lo; k<=hi; k++){
if(i>mid)
a[k] = aux[j++];
else if(j>hi)
a[k] = aux[i++];
else if(aux[i]<aux[j])
a[k] = aux[i++];
else{
a[k] = aux[j++];
count += mid-i+1;
if(count>1000000007)
count = count%1000000007;
}
}