题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 对于50%的数据,
s
i
z
e
≤
1
0
4
size \le {10^4}
size≤104 对于75%的数据,
s
i
z
e
≤
1
0
5
size \le {10^5}
size≤105 对于%100%的数据,
s
i
z
e
≤
2
∗
1
0
5
size \le 2*{10^5}
size≤2∗105 输入描述: 题目保证输入的数组中没有的相同的数字
示例:
输入:[1,2,3,4,5,6,7,0]
返回值:7
代码1:
classSolution:def__init__(self):
self.count =0defInversePairs(self, data):iflen(data)<2:return0
self.mergeSort(data)return self.count %1000000007defmergeSort(self,alist):# 递归终止条件iflen(alist)<2:return alist
# 递归
middle =len(alist)//2
left = self.mergeSort(alist[:middle])
right = self.mergeSort(alist[middle:])# 归并排序,并计算本次逆序对数
i, j =0,0
merged =[]while i <len(left)and j <len(right):if left[i]<= right[j]:
merged.append(left[i])
i +=1else:
merged.append(right[j])
j +=1
self.count +=(len(left)-i)return merged + left[i:]+ right[j:]