Leetcode 56. 合并区间

本文介绍了一种Python编程方法,用于合并给定的区间数组,确保输出的区间不重叠且完全覆盖输入。通过先按起点排序,然后逐个判断区间是否与现有区间重叠,实现了高效的区间合并。
摘要由CSDN通过智能技术生成

题目描述:以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 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] 可被视为重叠区间。

思路:
首先我们根据区间的起点做了一个排序,起点小的靠前,起点大的靠后;
其次我们根据前一个区间的终点和后一个区间的起点是否有重合,判断区间是否可以合并;
最后,合并后的区间起点一定是靠前的那个区间的起点,终点是两个区间中终点更大的那个;
从两个区间的合并过程中我们可以看出,合并区间:

根据区间起点排序;
维护一个当前合并的区间[start, end]
判断当前区间是否可以合并到当前的合并区间;可以则更新合并区间的终点,不可以这个区间作为新的一个合并区间去合并后面的区间。

python:
如果我们每次判断当前区间是否可以合并到当前的合并区间,那么最后一个区间无论是加入到原有的合并区间还是自己作为一个新的区间,最后一个合并区间都没有加入到结果列表中。因此,最后遍历完所有区间,要把当前的合并区间加入结果列表中。

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        # 对区间进行升序排序
        intervals.sort()
        # 初始化合并区间为首个区间
        start,end=intervals[0]
        # 结果列表
        res=[]
        for (s,e) in intervals:
            # 判断每一个区间能否加入当前合并区间
            if s>end:
                # 当前区间不能加入当前的合并区间,记录当前合并区间,以此区间作为新的合并区间
                res.append([start,end])
                start,end=s,e
            else:
                # 当前区间加入当前的合并区间,更新合并区间的终点
                end=max(end,e)
        # 补充加入最后一个合并区间
        res.append([start,end])
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值