/**
* 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:
static bool cmp(Interval i1, Interval i2){
if(i1.start == i2.start){
return i1.end > i2.end;
}
return i1.start < i2.start;
}
vector<Interval> merge(vector<Interval> &intervals) {
vector<Interval> ret;
sort(intervals.begin(), intervals.end(), cmp);
int leap = 1;
int size = intervals.size();
Interval tmpinter;
for(int i = 0; i < size; i += leap){
leap = 1;
tmpinter.start = intervals[i].start; tmpinter.end = intervals[i].end;
for(int j = i + 1; j < size; ++j){
if(intervals[j].start >= tmpinter.start && intervals[j].end <= tmpinter.end){
++leap;
}
else if(intervals[j].start <= tmpinter.end){
tmpinter.end = intervals[j].end;
++leap;
}
else{
ret.push_back(tmpinter);
break;
}
}
}
if(size > 0)
ret.push_back(tmpinter);
return ret;
}
};
最开始想用线段树来做..但是觉得leetcode上似乎并没有类似需要用这样特殊的数据结构的题目,所以就放弃了…然后就没有节操的看了别人的解答…
但还是写出了bug:
为了处理最后一个添加的tmpinter,我在循环结束之后又添加了一个tmpinter,但是这是不对的..
因为vector的 size有可能是0…