• 【LeetCode & 剑指offer刷题】查找与排序题13:Merge Intervals


    【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)

    Merge Intervals

    Given a collection of intervals, merge all overlapping intervals.
    Example 1:
    Input: [[1,3],[2,6],[8,10],[15,18]]
    Output: [[1,6],[8,10],[15,18]]
    Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
    Example 2:
    Input: [[1,4],[4,5]]
    Output: [[1,5]]
    Explanation: Intervals [1,4] and [4,5] are considerred overlapping.

    C++
     
    /**
     * Definition for an interval.
     * struct Interval {
     *     int start;
     *     int end;
     *     Interval() : start(0), end(0) {}
     *     Interval(int s, int e) : start(s), end(e) {}
     * };
     */
    //问题:区间合并
    /*
    方法:将各区间按照第一个元素排序,如果没有重叠,逐个将区间push到结果容器中,
    如果有重叠,进行区间合并,修改前一个区间第二个元素即可
    */
    class Solution
    {
    public:
        //自定义函数对象排序(或声明为static类型的函数也可以)
        struct
        {
            bool operator()(Interval& a, Interval& b)//这里用Interval&引用变量比较好,节省时间
            {
                return a.start<b.start;
            }
        } customLess;
           
        vector<Interval> merge(vector<Interval>& ins)
        {
            vector<Interval> res;
            if(ins.empty()) return res;
            sort(ins.begin(), ins.end(),customLess);//按第一个变量排序
            
            res.push_back(ins[0]);
            for(int i=1; i<ins.size(); i++)
            {
                if(ins[i].start > res.back().end) res.push_back(ins[i]); //如果没有重叠时
                else res.back().end = max(res.back().end, ins[i].end); //如果有重叠时,end选较大的那个
            }
           
            return res;
        }
       
    };
     
  • 相关阅读:
    Day12:前端代码的合并和登录过程的完善
    Day11:基本界面的完成
    Day10:界面的跳转
    Day9:尝试连接绑定数据与API
    Day8:转战前端开发
    Day7:熟悉搭建服务器工具及配置
    Day6:完成API的列举设计
    day14
    day13
    day13
  • 原文地址:https://www.cnblogs.com/wikiwen/p/10225962.html
Copyright © 2020-2023  润新知