1. 程式人生 > >Leetcode:57. 插入區間

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題的區間排序函式即可。

C++程式碼

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;     }

};