Leetcode435:删除重叠区间(python)

题目:

给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。

注意:

区间的终点大于起点。
区间 [1,2] 和 [2,3] 不算相互重叠。

解答:

贪心策略:优先保留结尾小且不相交的区间

实现方法:先对区间结尾进行从小到大的排序,确保后一个区间的首大于前一个区间的尾,保留,计数加一,用区间总数减去不重叠的区间个数就是要去除的个数

class Solution(object):
    def eraseOverLapIntervals(self,intervals):
        if not intervals:
            return 0
        nums = sorted(intervals,key=lambda x:x[1])#按照每一个区间的末尾进行排序
        count = 1
        end = nums[0][1]#第一个区间的末尾作为对比
        for st,en in nums:
            if st >= end:#后面区间的start是否大于前面区间的end
                count += 1
                end = en

        return len(nums)-count#用总区间减去不重叠的区间 就是要去除的区间
#测试
m = Solution()
k=m.eraseOverLapIntervals(([1,2],[1,2],[1,2]))
print(k)
s=m.eraseOverLapIntervals(([1,2],[2,4],[1,3]))
print(s)

运行结果与测试:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值