给定间隔的集合,合并所有重叠间隔。 例如, 给定[1,3],[2,6],[8,10],[15,18] return [1,6],[8,10],[15,18]。
/** * 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 comp(const Interval &a, const Interval &b){ if (a.start == b.start)//如果第一个元素相同,就按照最后一个元素比较;如果不同就按第一个元素来排序 return a.end < b.end; else return a.start < b.start; } class Solution { public: vector<Interval> merge(vector<Interval> &intervals) { sort(intervals.begin(), intervals.end(), comp);//定义排序规则,按照升序排序 vector<Interval> res; int len = intervals.size(); for (int i=0; i<len; i++){ if (res.empty()) res.push_back(intervals[i]); else{ Interval last = res.back();//找到res里面的最后一个元素与当前interval元素进行比较 if (last.end >= intervals[i].start){//当前一个元素end大于当前元素start时,在比较end与end之间,进行合并 res.pop_back(); last.end = max(last.end, intervals[i].end); res.push_back(last); }else//如果不能合并,直接入容器 res.push_back(intervals[i]); } } return res; } };
原文:http://www.cnblogs.com/Kobe10/p/6367292.html