题解 | #数组中的逆序对 python#

数组中的逆序对

http://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5

1, 将原数组排序,然后从小到大遍历排序数组,求这个数在原数组中的index,这个index就代表有多少个数字在该数的前面并且大于这个数.注意:每次计算后要在数组中除掉这个数。
2, 第一种方法超时,题解第二种解法,首先以第一个元素作为对照,比这个数大的进入大数组,比对照数小的进入小数组,此时记录大数组的个数加上1,用result累加,就是此刻和该数对比有多少个逆序,然后递归操作大数组和小数组中的元素,直到元素个数为<=1.

# 方法一
class Solution:
    def InversePairs(self, data):
        # write code here
        return self.solve(data) % 1000000007
    def solve(self, arr):
        if len(arr) <= 1:
            return 0
        pivot = arr[0]
        big, small = [], []
        res = 0
        for i in arr[1:]:
            if i > pivot:
                big.append(i)
            else:
                small.append(i)
                res += 1 + len(big)
        return res + self.solve(big) + self.solve(small)
        # write code here
s = Solution()
print(s.InversePairs([1, 2, 3, 4, 5, 6, 7, 0]))

# 方法二
class Solution:
    def InversePairs(self, data):
        data2 = sorted(data)
        count = 0
        for i in data2:
            count += data.index(i)
            data.remove(i)  # 此时计算一次后要删除该元素
        return count % 1000000007
全部评论

相关推荐

每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-21 13:38
8月实习会变多吗现在还没找到实习该怎么办...回复的hr好少
码农索隆:3-4月就要开始找,基本上6月份就发offer,7月初已经开始暑期实习了。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务