您好,登錄后才能下訂單哦!
這篇文章主要介紹LeetCode如何找出數(shù)組中的逆序?qū)?,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
在數(shù)組中的兩個數(shù)字,如果前面一個數(shù)字大于后面的數(shù)字,則這兩個數(shù)字組成一個逆序?qū)?。輸入一個數(shù)組,求出這個數(shù)組中的逆序?qū)Φ目倲?shù)。
0 <= 數(shù)組長度 <= 50000
N+(N/2)*2+(N/4)*4+...+1*N = NlogN
, 因為一共 logN
個乘積)class Solution:
def reversePairs(self, nums: List[int]) -> int:
self.res = 0
def mergesort(s, e):
if s >= e:
return
m = (s + e) >> 1
# 先排序并統(tǒng)計左右部分
mergesort(s, m)
mergesort(m + 1, e)
# 使用臨時數(shù)組存儲排序好的左右部分
# 注意這里選擇逆序存儲, 是因為可以利用O(1)的pop操作得到最小的元素
# 當(dāng)然這里也可以使用雙端隊列, 這樣就無需逆序了
left = nums[s:m + 1][::-1]
right = nums[m + 1:e + 1][::-1]
for i in range(s, e + 1):
if not right or left and left[-1] <= right[-1]:
# 當(dāng)前左側(cè)數(shù)字更小或者右側(cè)數(shù)字已經(jīng)用完, 此時不構(gòu)成逆序?qū)?br/> nums[i] = left.pop()
else:
# 當(dāng)前右側(cè)數(shù)字更小, 和剩余的左側(cè)部分都構(gòu)成逆序?qū)?br/> self.res += len(left)
nums[i] = right.pop()
mergesort(0, len(nums) - 1)
return self.res
以上是“LeetCode如何找出數(shù)組中的逆序?qū)Α边@篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。