tag数组-刷题预备知识-5. 数组中的滑动窗口
一, 概述
简而言之,滑动窗口算法在一个特定大小的字符串或数组上进行操作,而不在整个字符串和数组上操作,这样就降低了问题的复杂度,从而也达到降低了循环的嵌套深度。其实这里就可以看出来
滑动窗口主要应用在数组和字符串
上, 当你遇到让求子串,子数组的问题时就要考虑一下使用双指针滑动窗口了.
二, 原理
之后重复上述过程,先移动 right,再移动 left…… 直到 right 指针到达字符串 S 的末端,算法结束。
如果你能够理解上述过程,恭喜,你已经完全掌握了滑动窗口算法思想。至于如何具体到问题,如何得出此题的答案,都是编程问题,等会提供一套模板,理解一下就会了。
- 上述过程对于非固定大小的滑动窗口,可以简单地写出如下伪码框架:
//在s中寻找t的"最小覆盖子串", 找到后返回最小子串
string s.t;
int left,right = 0;
String res = s;
//定义一个窗口. 用来
while(right < s.size()){
//向右遍历, 增大窗口 (寻找可行解)
window.add(s[right]);
right++;
//检查窗口是否已经满足题目要求
// 窗口满足要求后, 开始缩短left 寻找最优解
while(window 满足要求){
//如果这次窗口的子串可以更短, 则更新res, 同时向后移动left, 把当前left指向的元素踢出窗口
res = minLen(res, window);
windows.remove(s[left]);
left++;
}
}
return res;
- 对于固定窗口大小,可以总结如下:
// 固定窗口大小为 k
string s;
// 在 s 中寻找窗口大小为 k 时的所包含最大元音字母个数
int right = 0;while(right < s.size()) {
window.add(s[right]);
right++;
// 如果符合要求,说明窗口构造完成,
while (right>=k) {
// 这是已经是一个窗口了,根据条件做一些事情
// ... 可以计算窗口最大值等
// 最后不要忘记把 right -k 位置元素从窗口里面移除
}
}
return res;
- 参考文章:
- labuladong
- https://www.cnblogs.com/huansky/p/13488234.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)