題目: 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
| 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; } };
|