class Solution:
def reversePairs(self, nums: List[int]) -> int:
def mergeSort(nums):
if len(nums)>1:
mid = len(nums)//2
leftalist = nums[:mid]
rightalist=nums[mid:]
res=mergeSort(leftalist)+mergeSort(rightalist)#将已有序列切分再分别归并
else: return 0
i = j = k = 0
while i<len(leftalist) and j<len(rightalist):#将左右列里的数字小的依次放入数组
if leftalist[i]<=rightalist[j]:#防止有大小相同的数
nums[k]=leftalist[i]
i+=1
else:
nums[k]=rightalist[j]
j+=1
res+=len(leftalist)-i#精髓!挪一步右,左边剩下多少个数就有多少个逆
k+=1
while i<len(leftalist):#将左列的小的放入数组
nums[k]=leftalist[i]
i+=1
k+=1
while j<len(rightalist):#将右列的放入数组
nums[k]=rightalist[j]
j+=1
k+=1
return res
res=mergeSort(nums)
return res
剑指 Offer 51. 数组中的逆序对
最新推荐文章于 2022-03-25 22:20:24 发布