题解 | #合并区间#
合并区间
http://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a
- 注意自定义结构排序两种写法:
// 方法1:重载运算符
bool operator<(const Interval& i1, const Interval& i2) {
//start相同,按end从小到达排序
if(i1.start == i2.start) {
return i1.end < i2.end;
}
//start不同,按start从小到大排序
return i1.start < i2.start;
}
// 方法2:lambda函数
sort(intervals.begin(),intervals.end(),[](Interval a, Interval b){
if(a.start==b.start){
return a.end < b.end;
}else{
return a.start< b.start;
}
});
代码
/**
* 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 operator<(const Interval& i1, const Interval& i2) {
//start相同,按end从小到达排序
if(i1.start == i2.start) {
return i1.end < i2.end;
}
//start不同,按start从小到大排序
return i1.start < i2.start;
}
class Solution {
public:
vector<Interval> merge(vector<Interval> &intervals) {
sort(intervals.begin(), intervals.end());
vector<Interval> res;
for(int i = 0; i < intervals.size(); i++) {
if(res.empty()||res.back().end < intervals[i].start){
// 无交集,直接添加
res.push_back(intervals[i]);
}else if(res.back().end < intervals[i].end) {
// intervals[i]的start 小于当前 最后一个的end,有交集,更新一下
res.back().end = intervals[i].end;
}
}
return res;
}
};