合并区间(NC37/考察次数Top57/难度中等)
Posted 码农指南
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并区间(NC37/考察次数Top57/难度中等)相关的知识,希望对你有一定的参考价值。
描述:
给出一组区间,请合并所有重叠的区间。
请保证合并后的区间按区间起点升序排列。
示例1
输入:
[[10,30],[20,60],[80,100],[150,180]]
返回值:
[[10,60],[80,100],[150,180]]
(题目来自牛客网)
用C++实现如下
class Solution {
public:
vector<Interval> merge(vector<Interval> &intervals) {
vector<Interval> res;
if(intervals.size() == 0)
return res;
sort(intervals.begin(), intervals.end(),comp); //使用sort函数进行排序
int start = intervals[0].start;
int end = intervals[0].end;
for(int i=1; i<intervals.size();i++)
{
Interval& a = intervals[i];
if(a.start > end) //下一个和上一个没有公共区域时
{
res.push_back(Interval(start,end)); //push进去上一个区间
start = a.start; //start和end从下一个区间开始
end = a.end;
}else if(a.end > end) //下一个区间的前端比前一个后端大,
{ //同时后端比前一个的前端大,则换成新的后端
end = a.end;
}
}
res.push_back(Interval(start,end)); //push进去最后的一个
return res; //返回
}
private:
//注意comp函数必须为static bool,返回值为bool类型。a.start<b.start为升序
static bool comp(Interval a, Interval b)
{
return a.start < b.start;
}
};
纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!
以上是关于合并区间(NC37/考察次数Top57/难度中等)的主要内容,如果未能解决你的问题,请参考以下文章
链表内指定区间反转(NC21/考察次数Top55/难度中等)
链表内指定区间反转(NC21/考察次数Top55/难度中等)
输出二叉树的右视图(NC136/考察次数Top40/难度中等)