区间窗口
1. 概念
区间问题,就是线段问题,让你合并所有线段、找出线段的交集。两个技巧,画图+排序!
2. 解题技巧(我的总结)
1> 区间重叠问题,排序后分类讨论,用一个变量记录前面最右端rightMax及其对应的索引idx
题目 | 说明 | 实现 |
---|---|---|
1288. 删除被覆盖区间 | 注意可能重复计算 | 我的提交 |
2> 使用优先堆解决区间问题
题目 | 说明 | 实现 |
---|---|---|
1353. 最多可以参加的会议数目 | 第i天应当参加所有当天可参加的会议中结束时间最早的 | 我的提交 |
480. 滑动窗口中位数 | 窗口分成凉拌菜,分别用大小顶堆维护,belongTO bool数组记录每个元素属于哪个堆,完成堆平衡 | 我的提交 |
3> 扫描线+优先队列解决 区间问题
遍历横坐标i :
所有起点==i的区间入队列
所有终点<=i的区间出队列
处理队首元素
i移动到min(队首元素的终点,区间集合中下一元素的起点)
题目 | 说明 | 实现 |
---|---|---|
218. 天际线问题 | i为横坐标 | 我的提交 |
4> 滑动窗口问题,遍历right,滑动left使区间符合条件
题目 | 说明 | 实现 |
---|---|---|
2762. 不间断子数组 | 使用map记录窗口内的所有值🥱 | 我的提交 |
30. 串联所有单词的子串 | 使用map记录窗口内的所有出现的小段,保持不超过words中的次数 | 我的提交 |
76. 最小覆盖子串 | 先从左0右端点恰满足条件的位置不断右滑窗口,左端点每次取极右,记录过程中最小窗口 | 我的提交 |
986. 区间列表的交集 | 固定区间一,依次讨论区间二逐渐向右的所有情况 | 我的提交 |
2> 问题可抽象为区间,则排序、双指针找窗口
题目 | 说明 | 实现 |
---|---|---|
1498. 满足条件的子序列数目 | 枚举最小值,搜索最右端,得到窗口 | 我的提交 |