435、无重叠区间
基本思想:
贪心算法
具体实现:
A、求出有几个区间不会重叠
1、区间集合中选择一个区间x,x是当前所有区间结束最早的 ,end最小
2、与x相交的区间都去掉
与x相交的区间的start都小于x的end
3、重复步骤1,2,知道区间为空
B、区间大小-上述结果
代码:
class Solution: def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int: if not intervals: return 0 intervals.sort(key=lambda x: x[1]) n = len(intervals) end = intervals[0][1] ans = 1 for i in range(1, n): if intervals[i][0] >= end: ans += 1 end = intervals[i][1] return n - ans
452、用最少的箭头射爆气球
基本思想:
同上
具体实现:
上一题擦边也不算重叠,这一题擦边算重叠
[1,2][2,3]算重叠
改一下判断条件就可以了
代码:
class Solution: def findMinArrowShots(self, points: List[List[int]]) -> int: if not points: return 0 points.sort(key=lambda balloon: balloon[1]) end = points[0][1] ans = 1 for balloon in points: if balloon[0] > end: end = balloon[1] ans += 1 return ans