題目: LeetCode - 986. Interval List Intersections

題目說明

給兩個代表區間的陣列,求兩陣列的交集。

解題思路

使用雙指針,s 為兩者開頭較大的值,e 為兩者結束較小的值,若是 s <= e 則代表這是一段交集,最後看哪個的結尾比較小,就往前移動那個指針。

參考解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// fast IO
static auto __ = []()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
return 0;
}();
class Solution {
public:
vector<vector<int>> intervalIntersection(vector<vector<int>>& A, vector<vector<int>>& B) {
int i = 0, j = 0, s, e;
vector<vector<int>> res;
while(i < A.size() && j < B.size())
{
s = max(A[i][0], B[j][0]);
e = min(A[i][1], B[j][1]);
if(s <= e)
res.emplace_back(vector<int>{s, e});
A[i][1] > B[j][1] ? ++j : ++i;
}
return res;
}
};