找到一个数组中,有多少个连续元素的和小于某个值,求出连续元素的长度的最小值。
滑动窗口法:
其本质也是快慢指针,一个指针指向窗口的起始位置,另一个指针指向窗口的终止位置。
1.定义快慢指针:
2.更新慢指针:
并记录长度
3. 更新快指针:
4.重复第二步:
一直到慢指针遍历到数组尾部。
但是以上更新快指针的方式是错误的。
伪代码如下:
i = 0;
result = MAX;
for(j = 0; j <= numsize; j++)
{sum += nums[i];while(sums >= s){subl = j - i + 1;//subl值的是滑动窗口的长度result = min(subl,result);//更新最小的窗口长度//开始移动起始位置sums = sums - nums[i];i++;}
}
注意,里面是while,原因如下:
当有一种数组1,1,1,1.....1,100,values = 105,我们要滑动快指针的时候是一个一个滑动,看代码的意思。
第一次滑动到终止:
再滑动快指针: