leetcode 1288 删除覆盖区间,python 自定义sorted 使用总结

题目链接: https://leetcode-cn.com/problems/remove-covered-intervals/

class Solution:
    def removeCoveredIntervals(self, intervals: List[List[int]]) -> int:
        import functools
        ''' 思路
        先排序 begin 从小到大,end 从大到小,然后再按照区间的相对位置进行三种不同的处理:
        1. 被包含
        2. 部分包含,右部分大于已有区间
        3. 区间完全不包含,直接更新现有区间
        图片说明
        '''
        n = len(intervals)
        if n == 1:
            return 1
        '''
        自定义排序:
        1. import functools
        2. 写好自定义的 排序函数cmp:要排序到前面的条件返回-1
        3. sorted(obj,key=functools.cmp_to_key(cmp))
        '''
        def sort_intervals(list1, list2):
            if list1[0] < list2[0]:
                return -1
            elif list1[0] == list2[0]:
                if list1[1] >= list2[1]:
                    return -1
                else: return 1
            else: return 1
        intervals = sorted(intervals, key=functools.cmp_to_key(sort_intervals))
        # print(intervals)
        windows = [0,0]
        cover_sum = 0
        for interval in intervals:
            if interval[0] >= windows[0] and  interval[1] <= windows[1]:
                cover_sum += 1
            elif interval[0] >= windows[0] and  interval[1] > windows[1]:
                windows[1] = interval[1]
            elif interval[0] > windows[1]:
                windows = interval
        return n - cover_sum
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值