• 【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;
        }
       
    };
     
  • 相关阅读:
    SQL基础-子查询&EXISTS&UNION
    SQL基础-汇总统计及GROUP BY
    SQL基础-创建新的输出字段
    SQL基础-过滤数据
    获取图片为二进制流,并且显示图片到网页
    计算两个日期相差的工作小时数,过滤了周末双休小时数
    计算两个日期相差的工作天数,过滤了周末双休天数
    WEB性能测试工具
    C#整合VS2010和NUnit
    如何打开Windows Server 2008 R2的域安全策略
  • 原文地址:https://www.cnblogs.com/wikiwen/p/10225962.html
Copyright © 2020-2023  润新知