57. Insert Interval

来源:互联网 发布:什么是sql注入攻击 编辑:程序博客网 时间:2024/06/11 16:18

这里写图片描述
第一种法:这道题可以借助Merge Intervals里面的代码,先将新的间隔加入到数组中,然后合并即可。时间复杂度是O(nlogn)。

class Solution {public:    static bool comp(const Interval &a, const Interval &b)    {        return a.start<b.start;    }    vector<Interval> insert(vector<Interval>& intervals, Interval newInterval)     {        if(intervals.empty())        {            intervals.push_back(newInterval);            return intervals;        }        intervals.push_back(newInterval);        sort(intervals.begin(),intervals.end(),comp);        int i;        vector<Interval>ret;        Interval node1=intervals[0];        for(i=1;i<intervals.size();i++)        {            Interval node2=intervals[i];            if(node1.end<node2.start)            {                ret.push_back(node1);                node1=node2;            }            else            {                node1.end=node2.end>node1.end?node2.end:node1.end;            }        }        ret.push_back(node1);        return ret;    }};

第二种方法:也可以不排序,直接插入时间间隔,插入的时间间隔的位置可以分成三部分:

插入位置左侧
插入位置(有重叠或无重叠)
插入位置右侧
这三个部分分别处理,只有在插入位置处理可能存在的情况即可。

class Solution {public:    vector<Interval> insert(vector<Interval>& intervals, Interval newInterval)     {        if(intervals.empty())        {            intervals.push_back(newInterval);            return intervals;        }        int i=0;        vector<Interval>ret;        while(i<intervals.size())        {            if(intervals[i].end<newInterval.start)//插入位置在右侧                ret.push_back(intervals[i]);            else if(newInterval.end<intervals[i].start)//插入位置在左侧            {                ret.push_back(newInterval);                while(i<intervals.size())                {                    ret.push_back(intervals[i]);                    i++;                }                return ret;            }            else//有重叠的情况            {                newInterval.start=newInterval.start<intervals[i].start?newInterval.start:intervals[i].start;                newInterval.end=newInterval.end>intervals[i].end?newInterval.end:intervals[i].end;            }            i++;        }        ret.push_back(newInterval);        return ret;    }}; 
0 0
原创粉丝点击