Merge Intervals 多区间合并

来源:互联网 发布:2016网络fps游戏排行榜 编辑:程序博客网 时间:2024/05/22 10:17

Merge Intervals

 

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

Hide Tags
 Array Sort
Hide Similar Problems
 (H) Insert Interval
/** * Definition for an interval. * struct Interval { *     int start; *     int end; *     Interval() : start(0), end(0) {} *     Interval(int s, int e) : start(s), end(e) {} * }; */  //比较函数一定要放到类的外面 bool cmp(const Interval &a,const Interval &b)    {        if(a.start==b.start)            return a.end < b.end;        return a.start < b.start;    }    class Solution {public:    vector<Interval> merge(vector<Interval>& intervals) {                vector<Interval> res;                if(intervals.size()<1)            return res;                    sort(intervals.begin(),intervals.end(),cmp);//排序                for(int i=0;i<intervals.size();i++)        {            int left=intervals[i].start;            int right=intervals[i].end;//保存第一个区间                        int j=++i;            while(j<intervals.size())            {                if(intervals[j].start<=right)//如果该区间的start,小于right,说明与前面的重合                {                    if(intervals[j].end>right)///如果该区间的end大,更新right                        right=intervals[j].end;                    j++;                }                else                    break;            }            i=--j;            Interval ss=Interval(left,right);            res.push_back(ss);        }        return res;    }};
0 0
原创粉丝点击