問題描述:
給定兩個由一些閉區間組成的列表,每個區間列表都是成對不相交的,並且已經排序。
返回這兩個區間列表的交集。
(形式上,閉區間 [a, b](其中 a <= b)表示實數 x 的集合,而 a <= x <= b。兩個閉區間的交集是一組實數,要么為空集,要么為閉區間。例如,[1, 3] 和 [2, 4] 的交集為 [2, 3]。)
示例:

輸入:A = [[0,2],[5,10],[13,23],[24,25]], B = [[1,5],[8,12],[15,24],[25,26]] 輸出:[[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]] 注意:輸入和所需的輸出都是區間對象組成的列表,而不是數組或列表。
提示:
0 <= A.length < 10000 <= B.length < 10000 <= A[i].start, A[i].end, B[i].start, B[i].end < 10^9
代碼:
class Solution: def intervalIntersection(self, A: List[List[int]], B: List[List[int]]) -> List[List[int]]: res = [] i = j = 0 while i < len(A) and j < len(B): lo = max(A[i][0], B[j][0]) hi = min(A[i][1], B[j][1]) if lo <= hi: res.append([lo, hi]) if A[i][1] < B[j][1]: i += 1 else: j += 1 return res
核心就是標紅的一段:比如
A = [[0,2],[5,10],[13,23],[24,25]]
B = [[1,5],[8,12],[15,24],[25,26]]
[0,2]和[1,5]之間2比5小,那么A中的下一個數組就可能與[1,5]有交集,所以讓指向A的指針+1。反之讓指向B的指針+1.
結果:
