面試題51 陣列中的逆序數對

2021-08-22 08:34:00 字數 864 閱讀 2004

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

思路:o(n2)肯定不行,用的歸併排序。(樹狀陣列也可以)

class solution 

int inverpairscore(vector&data, vector©, int l, int r)

int length =(r - l)/2;

int mid = (l + r) / 2;

//data是原始資料 copy是修改後的資料

int left = inverpairscore(copy, data, l, mid)%mod;

int right = inverpairscore(copy, data, mid + 1, r)%mod;

int lend = mid;

int rend = r;

int index = r;

int count = 0;

while (lend >= l&&rend >= mid + 1)

else

}for (; lend >= l;lend--)

copy[index--] = data[lend];

for (; rend >= mid + 1;rend--)

copy[index--] = data[rend];

//cout << left + right + count << endl;

return (((left + right)%mod + count)%mod)%mod;

}};

面試題51 陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。例如在陣列中,一共存在5個逆序對,分別是 7,6 7,5 7,4 6,4 5,4 看到這道題目,第一反應是順序掃瞄整個陣列,沒掃瞄到乙個數字,逐個比較該數字和它後面數字的大小,...

面試題51 陣列中的逆序對

題目 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 看到這個題目,我們的第一反應是順序掃瞄整個陣列。每掃瞄到乙個陣列的時候,逐個比較該數字和它後...

面試題51 陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 輸入 7 5,6 4 輸出 5先說自己想法 暴力法先來一遍,嗯 超時了!不知所措的我開啟了題解,前面又是一片光明!就是在歸併排序的基礎上新增了乙個計數變數,當合併兩個子陣...