Leetcode:57. 插入區間
給出一個無重疊的 ,按照區間起始端點排序的區間列表。
在列表中插入一個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。
示例 1:
輸入: intervals = [[1,3],[6,9]], newInterval = [2,5] 輸出: [[1,5],[6,9]]
示例 2:
輸入: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8] 輸出: [[1,2],[3,10],[12,16]] 解釋: 這是因為新的區間 [4,8]與 [3,5],[6,7],[8,10]重疊。
解題思路:
末尾插入一個新的區間,然後呼叫Leetcode56題的區間排序函式即可。
class Solution { public: vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) { intervals.emplace_back(newInterval); return merge(intervals); } vector<Interval> merge(vector<Interval>& intervals) { sort(intervals.begin(), intervals.end(), [](Interval a, Interval b) { return a.start < b.start; }); vector<Interval> res; for (const auto &iv : intervals) { if (res.empty() || res.back().end < iv.start) { res.emplace_back(iv); } else { res.back().end = res.back().end > iv.end ? res.back().end : iv.end; } } return res; } }; |