問題描述
給定兩個由一些閉區間組成的列表,每個區間列表都是成對不相交的,並且已經排序。
返回這兩個區間列表的交集。
(形式上,閉區間 [a, b](其中 a <= b)表示實數 x 的集合,而 a <= x <= b。兩個閉區間的交集是一組實數,要麼爲空集,要麼爲閉區間。例如,[1, 3] 和 [2, 4] 的交集爲 [2, 3]。)
解題報告
求解兩個區間的交集:
區間的開始取最大值 low
,區間的結尾取最小值 high
,如果low
high
,則這兩個區間至少有一個元素是相交的。
所以我們設置指針 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;
}
};