Leetcode 986. 區間列表的交集【雙指針,解釋非常詳細】

問題描述

給定兩個由一些閉區間組成的列表,每個區間列表都是成對不相交的,並且已經排序。

返回這兩個區間列表的交集。

(形式上,閉區間 [a, b](其中 a <= b)表示實數 x 的集合,而 a <= x <= b。兩個閉區間的交集是一組實數,要麼爲空集,要麼爲閉區間。例如,[1, 3] 和 [2, 4] 的交集爲 [2, 3]。)

解題報告

求解兩個區間的交集:
區間的開始取最大值 low,區間的結尾取最小值 high,如果low\lehigh,則這兩個區間至少有一個元素是相交的。

所以我們設置指針 i、j分別指向兩組區。
那麼在順序遍歷兩組區間的時候,什麼時候將指針後移呢?
答案是:哪個區間的結尾更新爲high,則指向該區間的指針應該後移。

實現代碼

class Solution {
public:
    vector<vector<int>> intervalIntersection(vector<vector<int>>& A, vector<vector<int>>& B) {
        int i=0,j=0,low,high;
        vector<vector<int>>ans;
        while(i<A.size()&&j<B.size()){
            low=max(A[i][0],B[j][0]);
            high=min(A[i][1],B[j][1]);
            if(low<=high){
                ans.push_back({low,high});
            }
            if(high==A[i][1]) i++;
            if(high==B[j][1]) j++;
        }
        return ans;
    }
};

參考資料

[1] 添加鏈接描述
[2] 題解區:何方圓

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章