合并区间C++
Posted 顾文繁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并区间C++相关的知识,希望对你有一定的参考价值。
给出一组区间,请合并所有重叠的区间。
请保证合并后的区间按区间起点升序排列。
要求:空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)
进阶:空间复杂度 O(val)O(val),时间复杂度O(val)O(val)
输入:
[[10,30],[20,60],[80,100],[150,180]]
输出
[[10,60],[80,100],[150,180]]
思路:先排序,排序好的区间只有两种可能:
1.两个区间重合
如果区间有交集,判断第二个的右区间是否大于结果集中的右区间,如果大于,说明两个区间是交叉的,如果小于说明包含。
2.两个区间不重合,直接添加到结果集合中去。
/**
* 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& a, Interval& b)
return a.start < b.start;
vector<Interval> merge(vector<Interval> &intervals)
if(intervals.size() == 0) return ;
sort(intervals.begin(), intervals.end(), cmp);
//排序后的第一个一定是最小的
vector<Interval> ret;
ret.push_back(intervals[0]);
for(int i = 1;i < intervals.size();i++)
// 相等时,也合并
if(intervals[i].start <= ret.back().end)
ret.back().end = max(ret.back().end, intervals[i].end);
else
ret.push_back(intervals[i]);
return ret;
;
以上是关于合并区间C++的主要内容,如果未能解决你的问题,请参考以下文章