题目定位
按起点排序之后,题目就变成一次贪心扫描:要么扩展当前区间,要么提交当前区间并开启新区间。
关键观察
按起点排序后,是否重叠只取决于当前合并区间的右端点。
目标复杂度
O(n log n) / O(n)
这题的解法思路怎么拆
1
按起点排序之后,题目就变成一次贪心扫描:要么扩展当前区间,要么提交当前区间并开启新区间。
2
按起点排序后,是否重叠只取决于当前合并区间的右端点。
3
先找出那个最能保留未来选择空间的局部决策。
4
如果排序能让这个选择被验证,就先排序。
参考实现
Python# Generic pattern template
items.sort(key=priority)
answer = 0
for item in items:
if can_take(item):
take(item)
answer = update(answer)
常见坑点
warning
没先排序就开始合并。
warning
循环结束后忘了把最后一个活动区间放进答案。
高频追问
如果题目改成最少删除多少区间,怎么变?
如果区间两端都是闭区间,判断重叠时要注意什么?
继续刷相关题
先把 贪心 这个模式刷成体系,再去做更难变体。