题目描述
 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
 输入描述:
 题目保证输入的数组中没有的相同的数字
数据范围:
对于%50的数据,size<=10^4
对于%75的数据,size<=10^5
对于%100的数据,size<=2*10^5
1.利用归并排序
public class Solution {
    int count;
    public int InversePairs(int [] array) {
        if(array.length!=0){
         mergeSort(array,0,array.length-1);
        }
        return count;
    }
    
    public void mergeSort(int[] arr,int left,int right){
        if(left<right){
         int mid = left+(right-left)/2;
          mergeSort(arr,left,mid);
          mergeSort(arr,mid+1,right);
          merge(arr,left,mid,right);
        }
        
    }
    public void merge(int[] arr,int left,int mid,int right){
        int l = left;
        int r = mid+1;
        int i = 0;
        int[] help = new int [right-left+1];
        while(l<=mid&&r<=right){
            if(arr[l]<=arr[r]){
                help[i++] = arr[l++];
            }else{
                help[i++] = arr[r++];
                count = (count+mid-l+1)%1000000007;
            }
        }
        while(l<=mid){
            help[i++] = arr[l++];
        }
          while(r<=right){
            help[i++] = arr[r++];
        }
        for( i = 0;i<right-left+1;i++){
            arr[left+i] = help[i];
        }
        
    }
}                










