##借鉴了大神的一些写法
# -*- coding:utf-8 -*-
global p
p=0
def merge(left, right):
global p
ll, rr = 0, 0
result = []
while ll < len(left) and rr < len(right):
if left[ll] < right[rr]:
result.append(left[ll])
ll += 1
else:
result.append(right[rr])
p=p+len(left)-ll
rr += 1
result+=left[ll:]
result+=right[rr:]
return result
def merge_sort(alist):
if len(alist) <= 1:
return alist
num = len(alist) // 2 # 从中间划分两个子序列
left = merge_sort(alist[:num]) # 对左侧子序列进行递归排序
right = merge_sort(alist[num:]) # 对右侧子序列进行递归排序
return merge(left, right) #归并
class Solution:
def InversePairs(self, data):
# write code here
merge_sort(data)
return p % 1000000007