
class Solution:
def reversePairs(self, nums: List[int]) -> int:
def mergeSort(nums,left,mid,right):
temp = [0] * (right-left+1)
index = 0
temp1 = left
temp2 = mid + 1
while temp1<= mid and temp2<=right:
if nums[temp1]<=nums[temp2]:
temp[index] = nums[temp1]
index += 1
temp1 += 1
else:
self.count += (mid-temp1+1)
temp[index] = nums[temp2]
index += 1
temp2 += 1
if temp1<=mid:
temp[index:] = nums[temp1:temp1+(mid-temp1+1)]
if temp2<=right:
temp[index:] = nums[temp2:temp2+(right-temp2+1)]
nums[left:left+(right-left+1)]=temp[:]
"""
# 不使用切片操作,一个个存
while temp1<=mid:
temp[index] = nums[temp1]
index += 1
temp1 += 1
while temp2 <= right:
temp[index] = nums[temp2]
index += 1
temp2 += 1
# 把新数组中的数字覆盖原数组
for k in range(len(temp)):
nums[left + k] = temp[k]
"""
def merge(nums,left,right):
mid = left + (right-left)//2
if left < right:
merge(nums,left,mid)
merge(nums,mid+1,right)
mergeSort(nums,left,mid,right)
self.count = 0
merge(nums,0,len(nums)-1)
return self.count