【LeetCode】134.Insert Interval
阿新 • • 發佈:2018-12-21
題目描述(Hard)
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
題目連結
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].
演算法分析
基本思路就是先掃描走到新的interval應該插入的位置,接下來就是插入新的interval並檢查後面是否衝突,一直到新的interval的end小於下一個interval的start,然後取新interval和當前interval中end大的即可。因為要進行一次線性掃描,所以時間複雜度是O(n)。
提交程式碼:
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */ class Solution { public: vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) { vector<Interval>::iterator iter = intervals.begin(); while (iter != intervals.end()) { if (newInterval.end < iter->start) { intervals.insert(iter, newInterval); return intervals; } else if (newInterval.start > iter->end) { ++iter; continue; } else { newInterval.start = min(newInterval.start, iter->start); newInterval.end = max(newInterval.end, iter->end); iter = intervals.erase(iter); } } intervals.insert(iter, newInterval); return intervals; } };