这个是基于排序库实现的
56 | Merge Intervals |
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
struct Overlap{
bool operator()(const Interval &left,const Interval&right)const{
return !(left.end<right.start||right.end<left.start);
}
};
bool overlap(const Interval &left,const Interval &right){
return !(left.end<right.start||right.end<left.start);
}
struct IntervalCompare{
bool operator()(const Interval &left,const Interval&right)const{
return left.start<right.start;
}
};
class Solution {
public:
vector<Interval> merge(vector<Interval> &intervals) {
if(intervals.empty()){
return intervals;
}
std::sort(intervals.begin(),intervals.end(),IntervalCompare());
int i=0;
Interval *merge = &intervals[0];
vector<Interval> merges;
int merged_i=0;
for(i=1;i<intervals.size();i++)
{
if(Overlap()(*merge,intervals[i]))
{
merge->end = std::max(merge->end,intervals[i].end);
}
else
{
if(merged_i!=i)
{
intervals[merged_i] = *merge;
}
++merged_i;
merge = &intervals[i];
}
}
if(merged_i!=i)
{
intervals[merged_i] = *merge;
}
++merged_i;
intervals.resize(merged_i);
return intervals;
}
};
同样是合并,没有太大的区别。这里使用了排序库函数,核心在排序。