zoukankan      html  css  js  c++  java
  • [LeetCode] 56

    Given a collection of intervals, merge all overlapping intervals.

    For example,
    Given [1,3],[2,6],[8,10],[15,18],
    return [1,6],[8,10],[15,18].

    思路:

    我们首先要做的就是给区间集排序,由于我们要排序的是个结构体,所以我们要定义自己的comparator,才能用sort来排序,我们以start的值从小到大来排序,排完序我们就可以开始合并了,首先把第一个区间存入结果中,然后从第二个开始遍历区间集,如果结果中最后一个区间和遍历的当前区间无重叠,直接将当前区间存入结果中,如果有重叠,将结果中最后一个区间的end值更新为结果中最后一个区间的end和当前end值之中的较大值,然后继续遍历区间集,以此类推可以得到最终结果,代码如下:

    /**
     * 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 comp( const Interval &a, const Interval &b)
        {
            return (a.start < b.start);
        }      // 自己定义一个comp函数(必须为静态函数),用来对 区间的开始值 进行排序
        vector<Interval> merge(vector<Interval>& intervals)
        {
            // start typing your code below
            // if intervals are sorted, it would be easy
            vector<Interval> res;     // 存放结果区间
            if (intervals.empty())   return res; //去掉这句不能AC
            sort(intervals.begin(), intervals.end(),comp);//sort函数的用法
            res.push_back(intervals[0]);// 将第一个区间存放进结果中
            for(int i = 1; i < intervals.size(); ++i)
            {
                if (res.back().end >= intervals[i].start)
                    res.back().end = max(res.back().end, intervals[i].end);// 如果区间有重叠则进行区间融合
                else
                    res.push_back(intervals[i]);  // 否则将区间直接存入结果
            }
            return res;
        }
    };

     注意:

    其中一个很重要的知识是sort函数的使用(详情参考C++primer 10.3 定制操作)

    sort(words.begin(), words.end(), isShorter)

    第三个参数是一个谓词,可以自己定义这个函数,比如上边是对  结构体里的start 元素作比较 进行排序。

  • 相关阅读:
    刷新界面
    分页加载数据(每次10条内容)的简单计算
    Intent传输包含对象的List集合
    android定时更新文件
    java中byte数据转换为c#的byte数据
    java zip文件的解压缩(支持中文文件名)
    Redis PHP扩展安装步骤
    CentOS6.5 开机启动自动运行redis服务
    centos7.2挂载硬盘攻略
    探究:Adobe Premiere Pro CC 2018 导入SRT字幕显示不全问题
  • 原文地址:https://www.cnblogs.com/simplepaul/p/6666489.html
Copyright © 2011-2022 走看看