數組中的逆序對

題目:

在數組中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個數組中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸出P%1000000007

思路:

待補充。。。

代碼:

public class Solution {
    public int InversePairs(int [] array) {
        if(array == null || array.length < 0){
            return 0;
        }
        int[] copy = new int[array.length];
        for(int i = 0;i < array.length;++i){
            copy[i] = array[i];
        }
        int count = InversePairsCore(array,copy,0,array.length - 1);
        return count;
    }

    public int InversePairsCore(int[] array,int[] copy,int start,int end){
        if(start == end){
            copy[start] = array[start];
            return 0;
        }
        int length = (end - start)/2;
        int left = InversePairsCore(copy,array,start,start + length);
        int right = InversePairsCore(copy,array,start + length + 1,end);
        int i = start + length;
        int j = end;
        int indexCopy = end;
        int count = 0;
        while(i >= start && j > start + length){
            if(array[i] > array[j]){
                copy[indexCopy--] = array[i--];
                count += j - start - length;
                if(count > 1000000007){
                    count %= 1000000007;
                }
            }else{
                copy[indexCopy--] = array[j--];
            }
        }
        for(;i >= start;--i){
            copy[indexCopy--] = array[i];
        }
        for(;j >= start + length + 1;--j){
            copy[indexCopy--] = array[j];
        }
        return ((left + right) % 1000000007 + count % 1000000007);

    }
}  
發佈了72 篇原創文章 · 獲贊 20 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章