插入新的區間,涉及到區間的合併.
Note:code
Example:ip
Example 1: Input: intervals = [[1,3],[6,9]], newInterval = [2,5] Output: [[1,5],[6,9]] Example 2: Input: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8] Output: [[1,2],[3,10],[12,16]] Explanation: Because the new interval [4,8] overlaps with [3,5],[6,7],[8,10].
class Solution { public: vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) { int n = intervals.size(), cur = 0; vector<vector<int>> res; while (cur < n && intervals[cur][1] < newInterval[0]) { res.push_back(intervals[cur++]); } while (cur < n && intervals[cur][0] <= newInterval[1]) { newInterval[0] = min(newInterval[0], intervals[cur][0]); newInterval[1] = max(newInterval[1], intervals[cur][1]); ++cur; } res.push_back(newInterval); while (cur < n) { res.push_back(intervals[cur++]); } return res; } };
第一個循環把不和給定新區間重疊的,應該放在新區間前面的區間先放在答案裏
第二個循環處理有重疊的部分,一直到後邊最後一個沒有重疊了退出
最後一個循環將新區間後邊的沒有重疊的放到答案裏get