leetcode-逆序对
题目描述
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
示例
输入: [7,5,6,4] 输出: 5
归并排序与逆序对
合并阶段 本质上是 合并两个排序数组 的过程,而每当遇到 左子数组当前元素 > 右子数组当前元素 时,意味着 「左子数组当前元素 至 末尾元素」 与 「右子数组当前元素」 构成了若干 「逆序对」 。

算法流程
归并排序与逆序对统计:

代码实现
class Solution: def reversePairs(self, nums: List[int]) -> int: def merge_sort(l, r): # 终止条件 if l >= r: return 0 # 递归划分 m = (l + r) // 2 res = merge_sort(l, m) + merge_sort(m + 1, r) # 合并阶段 i, j = l, m + 1 tmp[l:r + 1] = nums[l:r + 1] for k in range(l, r + 1): if i == m + 1: nums[k] = tmp[j] j += 1 elif j == r + 1 or tmp[i] <= tmp[j]: nums[k] = tmp[i] i += 1 else: nums[k] = tmp[j] j += 1 res += m - i + 1 # 统计逆序对 return res tmp = [0] * len(nums) # 辅助数组 tmp ,用于合并阶段暂存元素; return merge_sort(0, len(nums) - 1)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异