1. 问题背景与理解
这道算法题来自LeetCode的经典题目"寻找两个正序数组的中位数"。给定两个大小分别为m和n的正序(非递减)数组nums1和nums2,要求找出这两个数组合并后的中位数。题目要求算法的时间复杂度应为O(log(m+n))。
在实际开发中,这类问题常见于以下场景:
- 合并两个有序数据流时进行实时统计
- 数据库合并查询结果的中间值计算
- 大数据分析中的分布式排序结果合并
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础解法分析
2.1 暴力合并法
最直观的解法是将两个数组合并后排序,然后直接取中位数:
python复制def findMedianSortedArrays(nums1, nums2):
merged = sorted(nums1 + nums2)
n = len(merged)
if n % 2 == 1:
return merged[n//2]
else:
return (merged[n//2-1] + merged[n//2])/2
这种方法虽然简单,但时间复杂度为O((m+n)log(m+n)),不满足题目要求。
2.2 双指针归并法
利用两个数组已经有序的特性,可以使用双指针进行归并:
python复制def findMedianSortedArrays(nums1, nums2):
i = j = 0
merged = []
while i < len(nums1) and j < len(nums2):
if nums1[i] < nums2[j]:
merged.append(nums1[i])
i += 1
else:
merged.append(nums2[j])
j += 1
merged += nums1[i:]
merged += nums2[j:]
n = len(merged)
if n % 2 == 1:
return merged[n//2]
else:
return (merged[
