一文解决逆序数
一道逆序数,四种写法,从面试到竞赛一网打尽。计算逆序数有两种思路:
- 归并排序:统计归并过程中「右边元素先出列」时跨过的元素数;
- 值域计数:按 rank 逐个把元素落位计数,当前元素的逆序贡献等于值域区间 $[rank+1, n]$ 上的计数和——需要单点修改 + 区间求和的数据结构。
leetcode 上有一道弱化的模板题,下面四份代码都以它为载体。
思路一:归并排序
面试版(切片归并)
一般来说面试写出这版就够了:
class Solution:
def reversePairs(self, record: List[int]) -> int:
...