1.何为滑动窗口?
滑动窗口其实也是一种算法,主要有两类:一类是固定窗口,一类是可变窗口。固定的窗口只需要一个变量记录,而可变窗口需要两个变量。
2.固定窗口


就像上面这个图一样。两个相邻的长度为4的红色窗口,下一个窗口一定比前一个窗口少一个数据,以及多一个数据。


橙色为切换窗口时少的那个数据,黄色为多出来的那个数据,所以可以直接沿用之前数据,并且减去橙色数据,加上黄色数据,就是下一个窗口的值了。这就是滑动窗口的一个经典思路。
2.1 例题解析
首先题是这样的
给你一个整数数组arr和两个整数k和target。请你返回长度为k且平均值大于等于target的子数组数目。
我们可以看到他已经确定了窗口的长度,像这种滑动窗口的问题,一般都是连续字串和连续子数组的问题,在我做过的题中还没有例外,这也是滑动窗口的应用限制,必须连续。下面让我们看看怎么写:
(1)首先,统计前k个数的和sum,作为第一个窗口的值,并且判断是否满足sum>=target,如果满足,则计数器加一;
(2)然后,窗口开始右移,以后每次通过前一个相邻窗口,计算得到下一个窗口的值,并且判断条件是否满足满足则计数器加一;
(3)返回计数器的值;
nclude<iostream>
int numOfSubarrays(int* arr, int arrSize, int k, int target)
{
int r;
int sum = 0;
int cnt = 0;
for (r = 0; r < k; r++)
{
sum += arr[r];
}
if (sum >= target)cnt++;
for (r = k; r < arrSize; r++)
{
sum -=

最低0.47元/天 解锁文章
2267

被折叠的 条评论
为什么被折叠?



