前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >牛客网 数组中的逆序对

牛客网 数组中的逆序对

作者头像
发布2018-09-04 11:33:02
1.4K0
发布2018-09-04 11:33:02
举报
文章被收录于专栏:WD学习记录WD学习记录

题目:

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007

解答:

最直接的想法,是两个for循环嵌套,求解所有的逆序对,但是复杂度太高。

后参考数组中的逆序对,利用了归并排序的想法,详细思路参照:【算法32】计算数组中的逆序对

代码语言:javascript
复制
# -*- 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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年08月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:
  • 解答:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档