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]
.
#include<iostream> #include<vector> #include<algorithm> using namespace std; struct Interval { int start; int end; Interval() : start(0), end(0) {} Interval(int s, int e) : start(s), end(e) {} }; struct interval_less:public binary_function<const Interval,const Interval,bool> { bool operator()(const Interval A,const Interval B){ return A.start<B.start; } }; vector<Interval> merge(vector<Interval> &intervals) { if (intervals.size()<=1) return intervals; vector<Interval> Result ; sort(intervals.begin(),intervals.end(),interval_less()); Interval Cur_interval = *intervals.begin(); vector<Interval>::iterator Nex_interval = intervals.begin()+1; while (Nex_interval!=intervals.end()) { if ((*Nex_interval).start<=Cur_interval.end) Cur_interval = Interval(Cur_interval.start,max((*Nex_interval).end,Cur_interval.end)); else{ Result.push_back(Cur_interval); Cur_interval = *(Nex_interval); } Nex_interval++; } Result.push_back(Cur_interval); return Result; }
原文:http://blog.csdn.net/li_chihang/article/details/44587637