合并区间(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/难度中等)

合并有序链表(NC33/考察次数Top9/难度中等)

输出二叉树的右视图(NC136/考察次数Top40/难度中等)

合并k个已排序的链表(NC51/考察次数Top37/难度较难)

岛屿数量(NC109/考察次数Top41/难度中等)