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

数组中的逆序对

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

关键点在于利用归并排序统计逆序:
class Solution:
    count = 0
    mod = 1000000007
    def InversePairs(self , data: List[int]) -> int:
        # write code here
        def merge_sort(nums, left, right):
            if left >= right:
                return nums
            mid = left + ((right - left) >> 1)
            merge_sort(nums, left, mid)
            merge_sort(nums, mid + 1, right)

            i, j = left, mid + 1
            sort_nums = []
            while i <= mid and j <= right:
                if nums[i] < nums[j]:
                    sort_nums.append(nums[i])
                    i += 1
                else:
                    sort_nums.append(nums[j])
                    self.count += (mid - i + 1)
                    j += 1
            sort_nums.extend(nums[i: mid + 1])
            sort_nums.extend(nums[j: right + 1])
            nums[left: right + 1] = sort_nums
            self.count %= self.mod
            return nums
        merge_sort(data, 0, len(data) - 1)
        return self.count
去掉count的代码就是一个正常的归并排序,
要点在于当出现逆序时对第j个数字的逆序计数:
self.count += (mid - i + 1)
返回时进行取模操作,其他不变。

全部评论

相关推荐

04-15 13:42
四川大学 Java
蹲蹲offerrr:快投吧,有点晚现在
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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