leetcode 重叠区间问题

56 合并区间

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

整体思路:维护一个temp,逐个比较即可

class Solution:
    # 板子题了,根据452435修改
    # 注意的几个点:
    # 1、什么时候把temp加入result
    # 2、temp和i的判断关系,区间是否开闭?
    # 举例子的话,从最简单的情况开始
    def merge(self, intervals):
        if (len(intervals) <= 1):
            return intervals
        sortedPoints = sorted(intervals, key=lambda k: k[0])  # 将每个气球区间按照起点进行排序
        result = []
        temp = sortedPoints[0]
        sortedPoints.pop(0)
        for i in sortedPoints:
            # 判断端点的位置 这里一定要注意是>还是>=
            if (i[0] > temp[1]):
                result.append(temp)
                temp = i
            if (i[1] > temp[1]):
                temp[1] = i[1]
            # if (i[1] < temp[1]):
            #     temp[1] = i[1]
        result.append(temp)
        return result

力扣第 435 题「 无重叠区间」:

给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
是射气球的反向问题,
极端情况:假设有7个不重合区间,要射7次能全射破,则要移除的区间个数为0

用例:
[1,3] [2,4] [4,5] [3,6] 输出:2

class Solution:
    def eraseOverlapIntervals(self, intervals):
        if(len
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值