面試題51 陣列中的逆序對

2021-10-05 10:14:27 字數 981 閱讀 6314

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。

示例:
輸入:[7

,5,6

,4]輸出:

5

先說自己想法:暴力法先來一遍,嗯…超時了!!!不知所措的我開啟了題解,前面又是一片光明!!!

**就是在歸併排序的基礎上新增了乙個計數變數,當合併兩個子陣列時,如果左邊的子陣列中值大於右邊子陣列的值,那麼左邊子陣列中的元素個數就是逆序對的個數。所以,就很容易想到把這點**加到**了。

class

solution

private

intmerge

(int

nums,

int start,

int end)

int mid = start +

(end - start)/2

;int count =

merge

(nums, start, mid)

+merge

(nums, mid +

1, end)

;int i = start, j = mid +

1, k =0;

int[

] temp =

newint

[end - start +1]

;while

(i <= mid && j <= end)

while

(i <= mid)

while

(j <= end)

// 這一步是把排序好的部分填到原來陣列中

for(

int c =

0; c < k; c++

)return count;

}}

面試題51 陣列中的逆序對

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

面試題51 陣列中的逆序對

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

面試題51 陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。很容易想到從後往前折半插入排序時順便記錄比當前數小得數,但是這種方法在用例30的時候就超時了。class solution nums ed tmp return ed st 1...