LeetCode 56,区间合并问题

本文介绍了LeetCode第56题,难度为Medium,讲解了如何合并重叠区间。通过分析样例和问题,提出通过排序解决区间合并的顺序问题,确保合并结果的唯一性。文章提供了排序的解决方案,并对比了其他复杂算法,强调适合题目的算法才是最佳选择。
摘要由CSDN通过智能技术生成

本文始发于个人公众号:TechFlow,原创不易,求个关注


今天是LeetCode专题的第33篇文章,我们一起来看LeetCode的第56题,它的难度是Medium。

题意

这道题的题意也很简单,只有一句话:“Given a collection of intervals, merge all overlapping intervals.”

interval是间隔、区间的意思,也就是说题目会给我们一系列区间,让我们把这些区间合并在一起。

我们看下题目给的样例来感受一下:

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].

Input: [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.

分析

通过观察样例,我们发现题目通过数组给定区间,每个区间有两个端点。两个区间能够合并的条件,就是互相之间有交叉的部分。我们看下下图,这应该很直观。

当两个区间[s1, e1]和[s2, e2]中的e1 >= s2时,这两个区间就可以进行合并。合并之后得到的新区间是[s1, e2]。

但是这存在一个小问题,我们如何能判断第一个区间一定在第二个区间的左侧呢,会不会发生重叠呢?

如果是这种情况那么合并之后的结果就是[s2, e2]了,另外一个问题是,这样的区间一共有N个,我们怎么判断合并的顺序呢?很有可能出现AB两个区间原本不能合并,但是A合并了区间C之后又可以和B合并的情况。如果我们枚举的话会很麻烦,我们不但需要考虑合并的时候会发生的种种情况,还需要考虑合并的发生顺序。而且我们也很难得知是否所有能够合并的区间已经合并完成。

题解

我们梳理一下目前遇到的问题,第一个问题是区间根据位置的不同合并之后的结果可能有多个。第二个问题是区间合并之后会创建新的合并的可能,第三个问题是我们判断当前是否还有合并的可能开销很大

其中第三个问题是前两个问题导致的&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值