劍指Offer 51 陣列中的逆序對

2021-09-02 18:17:35 字數 1542 閱讀 9477

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

樣例輸入:[1,2,3,4,5,6,0]

輸出:6

class

solution

(object):

definversepairs

(self, nums)

:"""

:type nums: list[int]

:rtype: int

"""iflen

(nums)

<=1:

return

0 count =

0 mid =

int(

len(nums)/2

) self.copy = nums[:]

count = self.inversepairscore(nums,0,

len(nums)-1

)return count

definversepairscore

(self, seq, start, end)

:if start == end:

return

0 mid =

int(

(start + end)/2

) count =

0 count += self.inversepairscore(seq, start, mid)

+ self.inversepairscore(seq, mid +

1, end)

i, j = mid, end

index = end

while

(i >= start and j >= mid +1)

:if seq[i]

> seq[j]

: self.copy[index]

= seq[i]

count += j - mid

i -=

1else

: self.copy[index]

= seq[j]

j -=

1 index -=

1while

(i >= start)

: self.copy[index]

= seq[i]

index -=

1 i -=

1while

(j >= mid +1)

: self.copy[index]

= seq[j]

index -=

1 j -=

1for i in

range

(start, end +1)

: seq[i]

= self.copy[i]

return count

劍指offer 51 陣列中的逆序對

這到題的題目為 陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這兩個陣列中逆序對的總數。解題思路 將陣列分為若干個子陣列,其中每乙個數為乙個子陣列,先統計子陣列內部之間的逆序對,並對它們進行排序。然後統計相鄰兩個子陣列之間的逆序對用於對它們進行排序,直...

劍指offer51 陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 輸入描述 題目保證輸入的陣列中沒有的相同的數字 資料範圍 對於 50的資料,size 10 4對於...

劍指offer 51 陣列中的逆序對

在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。在陣列 7,5,6,4 中,一共有5個逆序對 分別是 7 5 7 6 7 4 6 4 5 4 直接暴力 class solution 遞迴 歸併排序 時間復制度 nlogn 我們...