题目:
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
解答:
最直接的想法,是两个for循环嵌套,求解所有的逆序对,但是复杂度太高。
后参考数组中的逆序对,利用了归并排序的想法,详细思路参照:【算法32】计算数组中的逆序对
# -*- coding:utf-8 -*-
class Solution:
def InversePairs(self, data):
# write code here
res,count=self.mergerSort(data,0)
count=count%1000000007
return count
def mergerSort(self,data,count):
n=len(data)
if n<=1:
return data,count
mid=n//2
left,countl=self.mergerSort(data[:mid],count)
right,countr=self.mergerSort(data[mid:],count)
count=countl+countr
ans=[]
p=len(left)
q=len(right)
l,r=0,0
while l<p and r<q:
if left[l]<=right[r]:
ans.append(left[l])
l+=1
else:
ans.append(right[r])
count=count+p-l
r+=1
ans+=left[l:]
ans+=right[r:]
return ans,count