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范围的问题要考虑好循环时候边界的选取