牛客网 数组中的逆序对

题目:

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数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

猜你喜欢

转载自blog.csdn.net/sxllllwd/article/details/81503363