56. Merge Intervals

来源:互联网 发布:php支付宝接口开发文档 编辑:程序博客网 时间:2024/05/23 16:54

problem:

Given a collection of intervals, merge all overlapping intervals.

For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].

1.先将目标区间数组按X轴从小到大排序,

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:    static bool cmp(Interval& ina, Interval& inb)    {        return ina.start < inb.start;    }    vector<Interval> merge(vector<Interval>& intervals) {        vector<Interval> result;        if(intervals.size() <= 1)            return intervals;                //排序        sort(intervals.begin(),intervals.end(),cmp);        //        result.push_back(intervals[0]);        for(int i=1; i<intervals.size(); i++)        {            Interval preIn = result.back();            Interval curIn = intervals[i];                        //分三种情况            if(curIn.start <= preIn.end && curIn.end > preIn.end)            {                preIn.end = curIn.end;                result.pop_back();                result.push_back(preIn);            }            else if(curIn.start > preIn.end)            {                result.push_back(curIn);            }                    }        return result;    }};


0 0
原创粉丝点击