解題思路
在 traverse 給定的 intervals 時,要思考的是:newInterval 是否與之重疊、或會插在哪裡?
而可以想像的是,當有兩個 intervals 時,關於重疊只會有三種情形:newInterval 要放 interval 左邊、放右邊,或者兩個重疊要 merge。
情況一:放左邊
這種情況代表要插入整個 intervals 的最前面。
情況二:放右邊
這種情況代表沒有重疊到,只是放入 intervals 中。
情況三:merge
如果既不屬於左邊也不屬於右邊,那就要把當前 interval 跟 newInterval merge起來。merge 取兩端點最小與最大即可。
程式碼
class Solution { public: vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) { vector<vector<int>> ans; for(int i=0; i<intervals.size(); i++) { if(newInterval[1] < intervals[i][0]) { ans.push_back(newInterval); newInterval = intervals[i]; } else if(newInterval[0] > intervals[i][1]) { ans.push_back(intervals[i]); } else { newInterval[0] = min(intervals[i][0], newInterval[0]); newInterval[1] = max(intervals[i][1], newInterval[1]); } } ans.push_back(newInterval); return ans; } };
沒有留言:
張貼留言