前言
我是会写Bug的子晗,生命不止,算法永不息!
昨天晚上,闲来无事去学校acm队训练机房呆了一会,太受刺激了,大一的把我摁在地上摩擦,属实很拉,学习了一个滑动窗口算法。唉,现在算法刚开课,之前自己也学过一段时间,但刷体很少。以后晚上得经常去跟着他们一起去训练了,这种行为我愿称之为“偷学"。(手动滑稽)
算法思想
我个人觉得滑动窗口算法思想与双指针相似,模拟一个窗口,创建的窗口逐渐滑动,根据题目给定的限制条件,来更新窗口边界,从而不断的更新题目所需值,当窗口滑动至边界时,这时也意味着,算法结束,即可获得所需值。一般情况下,右边界主动滑动,左边界被动滑动。
俗话说的好,实践是检验真理的唯一标准!下面通过三道滑动窗口算法题来深层次理解滑动窗口算法的实际应用。
滑动窗口I

解题思路
通过设置两个指针,来作为窗口的边界,模拟窗口滑动,当窗口有右边界的字符已经存在于窗口内,左边界就需要更新。同时更新最大子串长度,当右指针移动至字符串末尾,窗口滑动完毕,所得值即为最大子串长度值。
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
while(getline(cin,s))
{
int i=0,j=0,curlen=0,maxlen=0;
if(s.length()==0)
{
cout<<0<<endl;
return 0;
}
for(;j<s.length();</

本文介绍了滑动窗口算法的基本思想,并通过三个实例深入探讨其应用。包括求解最长无重复字符子串、寻找最短子数组使和大于等于m及包含特定数量0的最大连续子数组等问题。
最低0.47元/天 解锁文章
2836





