Menu
CoddyTech

Count Inversions

中等排序递归python iconjava iconcpp iconc iconjs icon+10

给定一个整数列表 nums,返回逆序对的数量:满足 i < j 且 nums[i] > nums[j] 的索引对,也就是较大的值出现在较小的值之前。相等的值不会构成逆序对,排序后的列表中没有逆序对。

函数

countInversions(nums: integer-array) → integer
numsinteger-array
整数列表
返回值integer
满足 i < j 且 nums[i] > nums[j] 的数对数量

约束条件

  • 1 ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • 答案至多为 n(n-1)/2 < 2 × 108,因此可以用有符号 32 位整数表示。

示例

输入
nums = [5, 3, 8, 1, 4]
输出
6
解释
5 排在 3、1 和 4 前面:有 3 对。3 排在 1 前面,8 排在 1 和 4 前面:又有 3 对。1 和 4 的顺序正确,所以总数是 6。
challenge icon

进阶

如果只有当 nums[i] > 2 × nums[j] 时,一对数才计数,会有什么变化?归并排序还能在 O(n log n) 时间内统计这些数对吗?

重置代码
def countInversions(nums):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

nums = [5, 3, 8, 1, 4]

预期输出

6