【Leetcode】贪心算法-区间问题-435

160 阅读2分钟

0️⃣python数据结构与算法学习路线
学习内容:

  • 基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等...
  • 数据结构:字符串(string)、列表(list)、元组(tuple)、字典(dictionary)、集合(set)、数组、队列、栈、树、图、堆等...

题目:

给定多个区间,计算让这些区间互不重叠所需要移除区间的最少个数。起止相连不算重叠。

输入输出:

输入是一个数组,数组由多个长度固定为 2 的数组组成,表示区间的开始和结尾。

输出一个整数,表示需要移除的区间数量。

Input: [[1,2], [2,4], [1,3]]

Output: 1

解题思路:

按右边界排序,对比上一个的右边和下一个的左边,叠加则加一

算法实现:

class Solution(object):
    def eraseOverlapIntervals(self, intervals):
        if intervals==[]:
            return 0 
        intervals.sort(key = lambda x:x[1])
        l = len(intervals)
        right = intervals[0][1]
        add = 0
        #右边端点排序
        for i in range(1,l):
            if intervals[i][0] >= right:
                right = intervals[i][1]
            else:
                add +=1
        return add

出现问题:

1.需要先判断列表是否为空否则intervals[0][1]会超界限

if not intervals:

    return 0

2.还是range范围的问题要考虑好循环时候边界的选取

Python中list的sort()方法和sorted()方法的区别