56. Merge Intervals
原创
©著作权归作者所有:来自51CTO博客作者Shengjianjun的原创作品,请联系作者获取转载授权,否则将追究法律责任
我这个算法应该是O(n)吧,主要就是先sort函数排序vector对象,从头开始遍历,每遍历一个element检查它的end对象是否比i+1大(即检查是否与下一个range交叉)若是,则递增i,并且如果end值取两者之间最大(可以把这两个想象成一条已经连接的新range,则start为最开始的i,end为遍历置现在的最大end值)
class Solution {
public:
static bool compare(Interval a,Interval b){
return a.start<b.start;
}
vector<Interval> merge(vector<Interval>& intervals) {
sort(intervals.begin(),intervals.end(),compare);
vector<Interval>res;
for(int i=0;i<intervals.size();++i){
int start=intervals[i].start;
int end=intervals[i].end;
while(end>=intervals[i+1].start&&i<intervals.size()-1){
++i;
if(end<intervals[i].end)end=intervals[i].end;
}
Interval temp(start,end);
res.push_back(temp);
}
return res;
}
};