LeetCode: Insert Interval

来源:互联网 发布:vip后缀的域名 编辑:程序博客网 时间:2024/05/21 05:38

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

/** * 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;        if(intervals.size() == 0)        {            result.push_back(newInterval);            return result;        }        for(int i = 0; i < intervals.size(); i++)        {            if(intervals[i].start > newInterval.start)            {                intervals.insert(intervals.begin() + i, newInterval);                break;            }            else if(i == intervals.size()-1)            {                intervals.push_back(newInterval);                break;            }        }        result.push_back(intervals[0]);        for(int i = 1; i < intervals.size(); i++)        {            if(result.back().end >= intervals[i].start)            {                result.back().end = std::max(result.back().end, intervals[i].end);            }            else            {                result.push_back(intervals[i]);            }        }        return result;    }};


Round 2:

/** * 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) {        int indexS = -1, indexE = -1;        for(int i = 0; i < intervals.size(); i++)        {            if(newInterval.start >= intervals[i].start)            {                indexS = i;            }            if(newInterval.end >= intervals[i].start)                indexE = i;        }        if(indexE == -1)            intervals.insert(intervals.begin(), newInterval);        else        {            if(indexS != -1)            {                if(intervals[indexS].end >= newInterval.start)                {                    newInterval.start = intervals[indexS].start;                }                else                    indexS++;            }            else                indexS = 0;            newInterval.end = std::max(intervals[indexE].end, newInterval.end);            if(indexS < indexE+1)                intervals.erase(intervals.begin()+indexS, intervals.begin()+indexE+1);            intervals.insert(intervals.begin()+indexS, newInterval);        }        return intervals;    }};


0 0
原创粉丝点击