Leetcode 57 Insert Interval

来源:互联网 发布:活动报名网站源码 编辑:程序博客网 时间:2024/05/20 22: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:    static bool cmp(const struct Interval &a,const struct Interval &b)      {          if(a.start!=b.start)              return a.start<b.start;          return a.end<b.end;      }     vector<Interval> insert(vector<Interval>& intervals, Interval newInterval)     {        vector<Interval> result;        sort(intervals.begin(),intervals.end(),cmp);        int flag=0; //表示插入区间是否加入        for(int i=0;i<intervals.size();i++)        {            if(flag)                 result.push_back(intervals[i]); //已插入            else            {                if(newInterval.end<intervals[i].start) //插入区间在第一个并且和其他区间没有交集                {                    flag=1;                    result.push_back(newInterval);                    result.push_back(intervals[i]);                }                else                 {                    if(newInterval.start<=intervals[i].end) // 有交集                    {                        flag=1;                        intervals[i].start=min(intervals[i].start,newInterval.start);                        intervals[i].end=max(intervals[i].end,newInterval.end);                        int jump=1;                        while(i+jump<intervals.size() && intervals[i+jump].start<=intervals[i].end)//合并后续区间                        {                            intervals[i].end=max(intervals[i].end,intervals[i+jump].end);                            jump++;                        }                        result.push_back(intervals[i]);                        i+=jump-1;                    }                    else                        result.push_back(intervals[i]);//无交集                }            }        }        if(!flag) result.push_back(newInterval);//未插入区间        return result;    }};


1 0
原创粉丝点击