在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。
樣例輸入:[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 我們...