↓快轉到主要內容
  1. LeetCode/

LeetCode 986: Interval List Intersections

·1 分鐘· ·
LeetCode Medium Two-Pointers Sweep-Line Array
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: medium 第一次嘗試:2026-02-01

  • 提交紀錄:Accepted(一次通過)

解題思路
#

兩個列表各自排好序、互不重疊,跟合併兩個排序陣列一樣用兩個指針。

  • 交集是 [max(start1, start2), min(end1, end2)],lo <= hi 才是非空的交集(閉區間,端點相同也算)。
  • 結束得比較早的那個區間,不可能再跟另一個列表後面的區間相交(後面的都更晚開始),所以把它的指針往前。

我的解法
#

class Solution:
    def intervalIntersection(self, firstList: List[List[int]], secondList: List[List[int]]) -> List[List[int]]:
        i = j = 0
        res = []
        while i < len(firstList) and j < len(secondList):
            start1, end1 = firstList[i]
            start2, end2 = secondList[j]
            lo, hi = max(start1, start2), min(end1, end2)
            if lo <= hi:
                res.append([lo, hi])
            if end1 < end2:
                i += 1                             # firstList[i] 先結束
            else:
                j += 1
        return res

複雜度
#

時間 O(n + m),空間 O(1)(不算輸出)。

要特別避免的錯誤
#

  • 用 lo < hi 判斷:閉區間 [5, 5] 也是合法的交集。
  • 移動開始得比較早的指針:要移動的是結束得比較早的。

面試口說整理
#

兩個列表都排好序,所以我用兩個指針各指一個區間,交集是較大的起點到較小的終點,起點不超過終點就加進答案。結束比較早的那個區間不會再跟後面的區間相交,所以移動它的指針。時間 O(n + m)。

相關文章

LeetCode 3555: Smallest Subarray to Sort in Every Sliding Window
·1 分鐘
LeetCode Medium Two-Pointers Greedy Sorting Array Monotonic-Stack
LeetCode 3555 解題筆記:每個長度 k 的視窗都是一次 LeetCode 581;n 只有 1000,對每個視窗跑 O(k) 的兩次掃描即可
LeetCode 581: Shortest Unsorted Continuous Subarray
·1 分鐘
LeetCode Medium Two-Pointers Greedy Sorting Array Monotonic-Stack
LeetCode 581 解題筆記:從左往右記最大值,最後一個比最大值小的位置是右界;從右往左記最小值,最後一個比最小值大的位置是左界
LeetCode 1574: Shortest Subarray to be Removed to Make Array Sorted
·1 分鐘
LeetCode Medium Two-Pointers Binary-Search Array Monotonic-Stack
LeetCode 1574 解題筆記:留下來的一定是「非遞減前綴 + 非遞減後綴」;先找出最長前綴和後綴,再用雙指針把兩段接起來
LeetCode 1877: Minimize Maximum Pair Sum in Array
·1 分鐘
LeetCode Medium Two-Pointers Greedy Sorting Array
LeetCode 1877 解題筆記:排序後最小配最大、次小配次大,對撞指針取配對和的最大值
LeetCode 2105: Watering Plants II
·1 分鐘
LeetCode Medium Two-Pointers Simulation Array
LeetCode 2105 解題筆記:Alice 從左、Bob 從右,對撞指針模擬澆水;相遇在同一株時由水比較多的人澆
LeetCode 809: Expressive Words
·2 分鐘
LeetCode Medium Two-Pointers String Array
LeetCode 809 解題筆記:兩個指針一段一段比對連續相同字元的長度;長度不同時,s 的那段必須至少 3 個且不少於 word;最後兩個字串都要剛好走完