题目描述
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
输入描述:
题目保证输入的数组中没有的相同的数字
数据范围:
对于%50的数据,size<=10^4
对于%75的数据,size<=10^5
对于%100的数据,size<=2*10^5
class Solution: def InversePairs(self, data): self.count =0 self.MergeSort(data) # print(self.MergeSort(data))#归并排序 return self.count % 1000000007 def MergeSort(self,lists): # 递归结束条件 if len(lists) <= 1: return lists # 分治进行递归 num = int(len(lists)/2) left = self.MergeSort(lists[:num]) right = self.MergeSort(lists[num:]) # 将两个有序数组进行合并 r, l=0, 0 result=[] # 将较小值放入到result中 while l<len(left) and r<len(right): if left[l] < right[r]: result.append(left[l]) l += 1 else: result.append(right[r]) r += 1 #剩余的左边的数都大于右边的那个数 self.count += len(left)-l # 将未被扫描到的直接追加到result后面 result += right[r:] result += left[l:] return result print(Solution().InversePairs([1,2,3,4,5,6,7,0]))