LeetCode,leetcodeoj
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:
Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].
Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].
This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].
這道題的要求是給定一組非重疊且開始時間有序的間隔,在其中插入一個新的間隔。
當然,這道題可以藉助Merge Intervals裡面的代碼,先將新的間隔加入到數組中,然後合并即可。時間複雜度是O(nlogn)。
事實上,也可以不排序,直接插入時間間隔,插入的時間間隔的位置可以分成三部分:
- 插入位置左側
- 插入位置(有重疊或無重疊)
- 插入位置右側
這三個部分分別處理,只有在插入位置處理可能存在的情況即可。
時間複雜度:O(n)
空間複雜度:O(n)
1 class Solution 2 { 3 public: 4 vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) 5 { 6 vector<Interval> vi; 7 8 int i = 0; 9 while(i < intervals.size() && intervals[i].end < newInterval.start)10 vi.push_back(intervals[i ++]);11 12 vi.push_back(newInterval);13 while(i < intervals.size() && vi[vi.size() - 1].end >= intervals[i].start)14 {15 vi[vi.size() - 1].start = min(intervals[i].start, vi[vi.size() - 1].start);16 vi[vi.size() - 1].end = max(intervals[i].end, vi[vi.size() - 1].end);17 ++ i;18 }19 20 while(i < intervals.size())21 vi.push_back(intervals[i ++]);22 23 return vi;24 }25 };
轉載請說明出處:LeetCode --- 57. Insert Interval