面試題51 陣列中的逆序對

2021-08-21 10:56:18 字數 595 閱讀 1630

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。例如在陣列中,一共存在5個逆序對,分別是(7,6)(7,5)(7,4)(6,4)(5,4)

看到這道題目,第一反應是順序掃瞄整個陣列,沒掃瞄到乙個數字,逐個比較該數字和它後面數字的大小,如果後面的數字比它小,則這兩個數字就組成乙個逆序對,假設陣列含有n個數字,由於每個數字都要喝o(n)個數字進行比較,因此這種演算法的時間複雜度為o(n*n),我們可以嘗試更快的演算法。

2.1 方法一:

class solution:

def inversepairs(self, data):

count = 0

copy =

for i in data:

copy.sort()

print(copy)

for i in range(len(copy)):

print(data.index(copy[i]))

count += data.index(copy[i])

data.remove(copy[i])

return count

面試題51 陣列中的逆序對

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

面試題51 陣列中的逆序對

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

面試題51 陣列中的逆序對

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