JZX轻语:简
LeetCode 986 - 区间列表的交集
发表于2024年05月31日
双指针典型题目。使用两个指针i
和j
分别指向A
和B
的区间,然后根据两个区间的交集(两个区间的最大左端点和最小右端点)来更新答案。指针的移动规则是:如果A
区间的右端点小于等于B
区间的右端点(A
区间位于B
左侧,说明A
的下一个区间可能和B
当前区间还是会有交集),那么A
区间的指针i
向右移动;否则B
区间的指针j
向右移动。
class Solution:
def intervalIntersection(self, firstList: List[List[int]], secondList: List[List[int]]) -> List[List[int]]:
i = j = 0
ans = []
while i < len(firstList) and j < len(secondList):
min_r = min(firstList[i][1], secondList[j][1])
max_l = max(firstList[i][0], secondList[j][0])
if max_l <= min_r:
ans.append([max_l, min_r])
if firstList[i][1] <= secondList[j][1]:
i += 1
else:
j += 1
return ans