劍指offer,陣列中額逆序對,python

2021-10-08 12:28:57 字數 705 閱讀 8387

最初,我想list中的數乙個個讀,與後面的數比大小,並計數,但是時間複雜度太高,牛客上無法執行完。

z =

0a =

len(data)

for i in

range

(a):

b = data.pop(0)

for i2 in data:

if b > i2:

z = z +

1return z

我又想了乙個方法,用min找列表最小的數,那最小的數前面的數都符合逆序對(min在list的位置就是前面的數量),後面也沒比min再小的,再找倒數第二小的數,迴圈下去,將所有的位置加起來就是最後結果。但是我低估了list的min函式的時間複雜度,在牛客上依然執行不完。只能去網上學歸併排序了

def

inversepairs

(self, data)

:# write code herezz

z =0 a =

len(data)

for i in

range

(a):

b =min(data)

c = data.index(b)

data.remove(b)

z = z + c

return z%

1000000007

劍指offer 陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。解法一 乙個數字能不能構成逆序對,關鍵看後面有幾個比他小的數字。根據這個思路,我們可以從後向前遍歷整個陣列。並用乙個大小為10的陣列,分別來儲存從後向前遍歷陣列時0 9每個數字...

劍指offer系列 陣列中逆序對

題目描述 輸入乙個陣列,求出其中逆序對的總個數 示例 輸入 逆序對有,幾種情況 因此輸出5 分析 利用歸併排序的思想進行排序,時間複雜度o nlgn int inversepairscore vector nums,vector copy,int begin,int end int mid begi...

劍指offer 陣列中的逆序對

題目描述 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。class solution vector tmp len int res mergesort data,tmp,0,len 1 return res private...