滑动窗口

发布时间 2023-09-04 12:23:28作者: wumengchao1234

滑动窗口思想适用于:最长,最短 场景

其核心思想如下:

1)寻求最长 

——左右指针(L,R)在起点,R向右逐步滑动

——每次滑动过程中

——如果窗口内的值满足条件,R向右扩大窗口,并更新最优结果

       如果不满足条件,L向右缩小窗口

——R到达结尾

 

2)寻求最短

——左右指针(L,R)在起点,R向右逐步滑动

——每次滑动过程中

——如果窗口内的值满足条件,L向右缩小窗口,更新最优结果

       如果不满足条件,R向右扩大窗口

 

寻求最长思路:

int left =0, right = 0, curResult, bestResult = 0;

while(右指针没有到达结尾){
      窗口扩大,加入right对应的元素,获取当前结果
      if(当前结果 优于 最优结果){
           bestResult = curResult;
           
      }else{
           当前结果 移除 left所在元素
           窗口缩小,left++; 
      }
      right++;
}

 

寻找最短思路:

int left =0, right = 0, curResult, bestResult = 0;
while(右指针没有到达结尾){
  窗口扩大,加入right对应的元素,获取当前结果
if(当前结果 优于最优结果){
  bestResult = curResult;
窗口缩小,left++
}else{
    窗口扩大,right++
}
}