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

2022-07-30 03:36:11 字數 449 閱讀 9684

求解逆序對問題,首先基礎方法就是歸併排序,高階方法可以用樹狀陣列。

首先知道什麼叫逆序對:對於乙個序列\(a\),如果\(i並且\(a[i]>a[j]\),則\(a[i]\)和\(a[j]\)構成逆序對。歸併排序在合併的時候可以將求解逆序對作為子問題來求解,如果\(a[p1],則直接將小的值加入到排序陣列中,如果\(a[p1]>a[p2]\),那\(p1-mid\)的所有的值都比\(a[p2]\)要大,會構成逆序對,可以順便統計到答案中。

**如下:

int merge_sort(vector&nums, int l, int r) 

copy(temp.begin(), temp.end(), nums.begin() + l);

return ans;

}class solution

};

面試題51 陣列中的逆序對

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

面試題51 陣列中的逆序對

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

面試題51 陣列中的逆序對

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