这题一开始想的是暴力破解,时间复杂度为n2,后来看题解,发现归并比较巧妙,
cnt+=len(left)-i :表示剩余的左边的数都大于右边的那个数
一开始分成7,5,cnt+=1,分成6,4,cnt+=1(在c步骤中),到d以后,还有cnt+=3
cnt=0
class Solution:
def InversePairs(self, data):
# write code here
global cnt
def mergesort(data):
global cnt
mid=int(len(data)/2)
if len(data)<2:
return data
left=mergesort(data[:mid])
right=mergesort(data[mid:])
i=0
j=0
res=[]
while i<len(left) and j<len(right):
if left[i]<right[j]:
res.append(left[i])
i+=1
else:
res.append(right[j])
j+=1
cnt+=len(left)-i
res += left[i:]
res += right[j:]
return res
mergesort(data)
return cnt%1000000007