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]
.
Subscribe to see which companies asked this question.
总结:我总是想用intervals[i]和intervals[i-1]比较,然后pop或者push,谁曾可知,intervals[i-1]早已经废掉了,我们需要比较的是已经排序好的。
此外,想要改变vector中的值,不能传递临时变量改变,深刻体会!!!
修改容器中的值,一定不要临时变量。
自定义compre函数一定要为static函数
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval> result;
if(intervals.empty()) return result;
sort(intervals.begin(),intervals.end(),compre);
result.push_back(intervals[0]);
for (int i = 1; i < intervals.size(); ++i)
{
Interval cur=intervals[i];
Interval pre=result.back();//不能和intervals[i-1]比较,因为之前的那个已经废了
if(cur.start>pre.end){
result.push_back(cur);
}else{
//pre.end=max(pre.end,cur.end); //修改容器中的值,这里修改的是临时变量,无果。
result.back().end=max(pre.end,cur.end);;
}
}
return result;
}
static bool compre(const Interval& Int1,const Interval& Int2){//static
return Int1.start<Int2.start;
}
};