在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
遍历搜索 超时
使用归并排序
public class Solution {
private int count;
public int InversePairs(int [] array) {
if(array.length==0)return 0;
MergeSort(array, 0, array.length-1);
return count;
}
// 归并排序,
private void MergeSort(int[] array,int start,int end){
if(start>=end) return; // 终止条件
int mid=(start+end)/2; //
MergeSort(array,start,mid);
MergeSort(array,mid+1,end);
Merge(array,start,mid,end);
}
private void Merge(int[] array,int start,int mid,int end){
int[] temp=new int[end-start+1];
int k=0,i=start,j=mid+1;
while(i<=mid && j<=end){
//
if(array[i]<=array[j]){
temp[k++]=array[i++];
}else{
temp[k++]=array[j++];
count=(count+(mid-i+1))%1000000007;
}
}
while(i<=mid){
temp[k++]=array[i++];
}
while(j<=end){
temp[k++]=array[j++];
}
for(int m=0; m<k; m++){
array[start+m] = temp[m];
}
}
}