題目:
在數組中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個數組中的逆序對的總數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);
}
}