1. 程式人生 > >劍指offer-題36:陣列中的逆序對

劍指offer-題36:陣列中的逆序對

題目描述

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

實驗平臺:牛客網

解決思路:

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

這題在牛客網網上執行不通過,不知道是怎麼回事。問題解決了再來改吧。

java:

public class Solution {
    public int InversePairs(int[] array) {
        if (array.length == 0) {
            return 0;
        } else
{ int[] copyArray = new int[array.length]; for (int i = 0; i < array.length; i++) { copyArray[i] = array[i]; } return InversePairsCore(0, array.length - 1, array, copyArray) % 1000000007; } } public int InversePairsCore(int start, int
end, int[] array, int[] copyArray) { if (start == end) { copyArray[start] = array[start]; return 0; } int length = (end - start) / 2; int left = InversePairsCore(start, start + length, copyArray, array); int right = InversePairsCore(start + length + 1
, end, copyArray, array); int i = start + length; // 前半段最後一個數字的下標 int j = end;// 後半段最後一個數字的下標 int copyIndex = end; int count = 0; while (i >= start && j >= start + length + 1) { if (array[i] > array[j]) { copyArray[copyIndex--] = array[i--]; count += j - start - length; } else { copyArray[copyIndex--] = array[j--]; } } for (; i >= start;) { copyArray[copyIndex--] = array[i--]; } for (; j >= start + length + 1;) { copyArray[copyIndex--] = array[j--]; } return left + right + count; } }

python: