LeetCode-Insert Interval

来源:互联网 发布:万人网络营销软件站 编辑:程序博客网 时间:2024/06/11 20:47

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

Solution:

Code:

<span style="font-size:14px;">/** * 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> result;        const int length = intervals.size();        if (length == 0) {            result.push_back(newInterval);            return result;        }        if (newInterval.end < intervals[0].start) {            intervals.insert(intervals.begin(), newInterval);            return intervals;        }        if (newInterval.start > intervals[length-1].end) {            intervals.push_back(newInterval);            return intervals;        }        int index = 0;        for (; index < length; ++index)            if (intervals[index].end >= newInterval.start) break;            else result.push_back(intervals[index]);        newInterval.start = min(intervals[index].start, newInterval.start);        for (; index < length; ++index)            if (intervals[index].start > newInterval.end) break;        newInterval.end = max(intervals[index-1].end, newInterval.end);        result.push_back(newInterval);        if (index != length)            result.insert(result.end(), intervals.begin()+index, intervals.end());        return result;    }};</span>



0 0