前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​LeetCode刷题实战56:合并区间

​LeetCode刷题实战56:合并区间

作者头像
程序员小猿
发布2021-01-20 10:49:09
2320
发布2021-01-20 10:49:09
举报
文章被收录于专栏:程序IT圈程序IT圈

今天和大家聊的问题叫做 合并区间,我们先来看题面:

https://leetcode-cn.com/problems/merge-intervals/

Given a collection of intervals, merge all overlapping intervals.

题意

给出一个区间的集合,请合并所有重叠的区间。

样例

代码语言:javascript
复制
示例 1:

输入: intervals = [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入: intervals = [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

解题

此题的难点就是判断哪些区间重叠了,以及如何进行合并。重叠只有两种情况,一个区间是另外一个区间的子集,或者两个区间相邻(有部分重叠)。由于有区间在容器中有次序关系,那么需要分a是b的子集还是b是a的子集,则重叠的情况就分为了四种。那能不能找到一种操作,在合并之前就将所有的情况合并为一种情况呢?答案显然是有的——排序。此处的排序需要以左区间为主次序递增,右区间为辅次序递增。即首先保证左区间递增,如果某两个元素的左区间相同,那么则比较他们的右区间。排序后再进行合并即可。

示例图解

代码语言:javascript
复制
class Solution {
public:
  static bool myCompare(Interval one, Interval two){
    //以start为主次序递增
    if (one.start == two.start){//当start相等的时候,才进行比较end
      return one.end < two.start;
    }
    else {//否则直接比较start的大小关系
      return one.start < two.start;
    }
  }

  vector<Interval> merge(vector<Interval>& intervals) {
    sort(intervals.begin(), intervals.end(), myCompare);//按照自定义顺序进行排序
    for (int i = 0; i < intervals.size(); ++i){//动态扫描
      int begin = intervals[i].start;//基准begin
      int end = intervals[i].end;//基准end
      //因为排序的时候就保证了start为主次序递增,只要下一个的start小于上一个的end,就证明可以进行合并
      while (i + 1 < intervals.size() && intervals[i + 1].start <= end){//如果能进行合并
        end = max(intervals[i + 1].end, end);//更新
        intervals.erase(intervals.begin() + i + 1);
      }
      intervals[i].end = end;//更新i的end
    }
    return intervals;
  }
};
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意
    • 样例
    • 解题
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档