435. 无重叠区间
题目描述
解题思路
求最少的移除区间个数,等价于尽量多保留不重叠的区间。在选择要保留区间时,区间的结尾十分重要:选择的区间结尾越小,余留给其它区间的空间就越大,就越能保留更多的区间。
因此,采取的贪心策略为:优先保留结尾小且不相交的区间。
代码实现
class Solution:
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
if not intervals:
return 0
vals = sorted(intervals, key=lambda x: x[1])
# 第一个肯定保留
save = 1
pre = vals[0][1]
for i in range(1, len(vals)):
# 满足贪心条件,保留
if vals[i][0] >= pre:
save += 1
# 保留时pre才会更新
pre = vals[i][1]
return len(vals) - save