1. 程式人生 > >LeetCode-57:Insert Interval (插入間隔)

LeetCode-57:Insert Interval (插入間隔)

題目:

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].

問題解析:

給定間隔陣列,和需要插入的間隔,將間隔插入到陣列中,返回新陣列。

連結:

思路標籤

前和後比較、後與前比較

解答:

  • 題目其實不難,關鍵是理清楚什麼時候更新插入的新節點。
/**
 * 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> ret; auto iter = intervals.begin(); while(iter != intervals.end() && iter->end < newInterval.start){ ret.push_back(*iter); iter++; } while
(iter != intervals.end() && iter->start <= newInterval.end){ newInterval.start = min(newInterval.start, iter->start); newInterval.end = max(newInterval.end, iter->end); iter++; } ret.push_back(newInterval); while(iter != intervals.end()){ ret.push_back(*iter); iter++; } return ret; } };