数组中的逆序对

last modify

问题简述

在数组中的两个数字,如果前一个数字大于后面的数字,则这两个数字组成一个逆序对。
输入一个数组,求该数组中的逆序对的总数。
详细描述
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。

示例 1:
    输入: [7,5,6,4]
    输出: 5

限制:
    0 <= 数组长度 <= 50000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路1:利用归并排序

  • 在合并过程中统计逆序对的数量

    • 归并排序的合并过程:依次比较两个子数组的首元素,将其中较小的放置到一个新的数组中;

    • 每当遇到左子数组当前元素 > 右子数组当前元素时,意味着「左子数组当前元素 至 末尾元素」与「右子数组当前元素」构成了若干「逆序对」

  • 归并排序需要用到辅助数组,因此其空间复杂度为 O(N)

    • 辅助数组一般有两种用法,分别见写法1 和 写法2;

Python:写法1
Python:写法2

思路2:树状数组

数组中的逆序对

Python

更快的代码

Python:快排?
Python:二分?

Last updated