数组中的逆序对

题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
输入描述:题目保证输入的数组中没有的相同的数字
数据范围:对于%50的数据,size<=10^4;对于%75的数据,size<=10^5;对于%100的数据,size<=2*10^5

实现语言:Java

public class Solution {
    static int pairNum;
    public int InversePairs(int [] array) {
        pairNum=0;
        if(array!=null){
            mergeSort(array,0,array.length-1);
        }
        return pairNum;
    }
    private void mergeSort(int[] array,int start,int end){
        int mid=(start+end)>>1;
        if(start<end){
            mergeSort(array,start,mid);
            mergeSort(array,mid+1,end);
            mergeHelper(array,start,mid,end);
        }
    }
    private void mergeHelper(int[] arr, int left, int mid, int right) {
        int[] tmp = new int[right - left + 1];
        int i = left;
        int j = mid + 1;
        int k = 0;
        while (i <= mid && j <= right) {
            if (arr[i] < arr[j]) {
                tmp[k++] = arr[i++];
            } else {
                tmp[k++] = arr[j++];
                pairNum += mid - i + 1;
                if (pairNum > 1000000007) {
                    pairNum %= 1000000007;
                }
            }
        }
        while (i <= mid) {
            tmp[k++] = arr[i++];
        }
        while (j <= right) {
            tmp[k++] = arr[j++];
        }
        for (int m = 0; m < tmp.length; m++) {
            arr[m + left] = tmp[m];
        }
    }
}
原文地址:https://www.cnblogs.com/xidian2014/p/10198694.html