力扣视频笔记18——滑动窗口+209+1456

目的

减少while循环

定义窗口 时,left=0 rigth=0 窗口的左右端都在开始位置,然后left++ right++使得窗口往后移动。

例子

在这里插入图片描述
常规做法:从第一个元素开始,指针往后移,每三个数相加。

在这里插入图片描述
当指针在1时,1+4+2=7
当指针在2时,4+2+3=9
可以看到,4+2被加了两次,有没有什么办法只计算一次4+2呢(不用重复计算这样的步骤呢)

滑动窗口的做法:
窗口是固定的,题目告诉你了3个数之和,因此窗口长度为3.
第一次窗口,1+4+2=7
在这里插入图片描述
第二次窗口
7(原来的和)-1(出去的数)+3(新加入的数)=9
在这里插入图片描述
第三个窗口同理,减去出去的,加上新加入的。。。。
在这里插入图片描述

什么时候用滑动窗口

以k为长度最大的和,最小的和。
在这里插入图片描述

题目209

在这里插入图片描述

思路

题目中没有定长,不代表我们不能用滑动窗口。
题目要你求连续的数组,因此不能跳,只能连续依次的相加。用滑动窗口 依次往后滑动。即每滑一次,滑出一个元素。

第一步:
首先开一个窗口,不满足
两个窗口,之和还是不满足
三个窗口,不满足
四个窗口,满足!之和为8>7,

在这里插入图片描述
和为8,目前最小的长度为4
找到了第一个满足的滑动窗口以后,滑动窗口移动,往后移。

第二步:把2从组合里踢出去,从3开始
在这里插入图片描述
不满足,往后扩

在这里插入图片描述
满足 和为10>7 最小长度也是4

第三步:把3从组合里踢出去,
在这里插入图片描述

和为7=7 刚好满足,最小长度变为了3

第四步:把1踢掉
在这里插入图片描述
和为2+4=6 不满足 往后找
扩大窗口
在这里插入图片描述
和为2+4+3=9>7 此时最小长度为3 之前也是3 所以不变

第五步:踢掉原来的2
在这里插入图片描述
此时的窗口4+3=7刚好满足 最小长度为2
在这里插入图片描述

伪代码

在这里插入图片描述

代码

在这里插入图片描述

在这里插入图片描述

题目1456

在这里插入图片描述

思路+代码

第一种方法:(计数函数)
遇到数组里面符合的数,加一
否则不加。然后

给定了长度k
想到用滑动窗口
依次往后滑

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值