题解 | #合并区间#
合并区间
http://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a
/**
* 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) {
if (intervals.empty() || intervals.size() == 1) return intervals;
// 按区间左端点进行排序
sort(intervals.begin(), intervals.end(), [](Interval& i1, Interval& i2) {
return i1.start < i2.start;
});
vector<Interval> res;
// 取第一个区间为当前区间(其实指的是上一个区间),从第二个区间开始扫描
int l = intervals[0].start, r = intervals[0].end;
for (int i = 1; i < intervals.size(); i ++ ) {
// 如果当前区间和下一个区间没有交集,则将当前区间直接加入到答案中
if (intervals[i].start > r) {
res.push_back({l, r});
// 更新当前区间为下一个区间
l = intervals[i].start, r = intervals[i].end;
} else {
// 当前区间和下一个区间有交集(包括包含的情况)
r = max(r, intervals[i].end);
}
}
// 将最后一个区间加入到答案中
res.push_back({l, r});
return res;
}
};
查看22道真题和解析
网易游戏公司福利 637人发布