1. 问题背景与核心需求
区间交集问题是算法面试中的经典题型,尤其在处理时间调度、资源分配等场景时尤为常见。给定两个已排序的区间列表,我们需要找出所有重叠的区间组合。这个问题看似简单,但实际编码时会遇到各种边界条件的考验。
举个例子,假设我们有两个会议室预定表:
- 表A:[[1,3],[5,9]]
- 表B:[[2,4],[6,8]]
那么它们的交集应该是[[2,3],[6,8]]。这个结果是怎么来的?第一个区间[1,3]和[2,4]重叠部分是[2,3],第二个区间[5,9]和[6,8]重叠部分是[6,8]。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 双指针解法原理剖析
2.1 算法核心思想
双指针法的精髓在于利用区间已排序的特性,通过两个指针分别遍历两个列表,每次只移动末端较小的那个指针。这种策略确保了不会遗漏任何可能的交集,时间复杂度可以控制在O(m+n)。
具体来说,对于两个区间A[i]和B[j]:
- 如果A[i]的末端小于B[j]的始端,说明A[i]完全在B[j]左侧,i++
- 如果B[j]的末端小于A[i]的始端,说明B[j]完全在A[i]左侧,j++
- 否则存在交集,交集区间为[max(A[i].start, B[j].start), min(A[i].end, B[j].end)]
2.2 边界条件处理
实际编码时需要特别注意几种特殊情况:
- 完全包含:如A=[1,5], B=[2,3],交集是[2,3]
- 部分重叠:如A=[1,3], B=[2,4],交集是[2,3]
- 单点重叠:如A=[1,2], B=[2,3],交集是[2,2]
- 空集处理:当两个区间只是端点接触时,不同题目可能有不同要求
关键提示:面试时一定要先和面试官确认单点接触是否算作交集,这是常见的考查点。
3. 完整代码实现与逐行解析
3.1 Python实现版本
python复制def intervalIntersection(A, B):
i = j = 0
res = []
while i < len(A) and j < len(B):
# 确定左右边界
low = max(A[i][0], B[j][0])
high = min(A[i][1],
