Merge Intervals
Leetcode algorithms problem 56:Merge Intervals
问题描述
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].问题提示
无
思路
1.直接用迭代器进行两次遍历,当两边区间重叠时父遍历更新数据,子遍历使用erase函数删除数据,最后进行排序,提交显示超时,遂放弃
2.查看题目的讨论得知思路:先将原vector进行排序,再从最初的数据开始维护一个区间,遍历排序后的vector,当区间重叠时更新维护的最后一个区间,不重叠则将新数据作为维护的最后一个区间。
代码
class Solution {
public:
vector<Interval> merge(vector<Interval>& intervals) {
if (intervals.empty()) return vector<Interval>{};
vector<Interval> result;
sort(intervals.begin(), intervals.end(), [](Interval a, Interval b){return a.start < b.start;});
result.push_back(intervals[0]);
for (int i = 1; i < intervals.size(); i++) {
if (result.back().end < intervals[i].start) {
result.push_back(intervals[i]);
}else {
result.back().end = max(result.back().end, intervals[i].end);
}
}
return result;
}
};
时间复杂度: O(nlogn)
空间复杂度: O(n)
代码重点
c++11 引入了LAMBDA
第6行中的[](Interval a,Interval b {returna.start < b.start;} 相当于python当中的lambda