# -*- coding:utf-8 -*- class Solution: def __init__(self): self.result=0 def InversePairs(self, data): # write code here self.splits(data) return self.result%1000000007 def splits(self,data): if len(data)<=1: return data mid=len(data)//2 left=self.splits(data[:mid]) right=self.splits(data[mid:]) return self.ranks(left, right) def ranks(self,left,right): l=0 r=0 ret=[] while l<len(left) and r<len(right): if left[l]>right[r]: ret.append(right[r]) r+=1 self.result+=len(left)-l ##关键点,其他都是归并过程,只有这步计算次数 else: ret.append(left[l]) l+=1 ret+=left[l:] ret+=right[r:] return ret