本题是一个滑动窗口的题,
所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。
在本题中实现滑动窗口,主要确定如下三点:
窗口内是什么?窗口就是 满足其和 ≥ target 的长度最小的 连续 子数组。
如何移动窗口的起始位置?窗口的起始位置如何移动:如果当前窗口的值大于target了,窗口就要向前移动了(也就是该缩小了)。
如何移动窗口的结束位置?窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。
代码如下:
func minSubArrayLen(target int, nums []int) int {
n:=len(nums) //数组的长度
sum:=0 //表示每一段子数组的总和
res:=n+1 //最终的结果(最小的连续子数组个数)初始化为n+1,目的是为了判断“不存在符合条件的子数组,返回0”的情况
for i,j:= 0,0;i < n;i++{ //i 表示滑动口的终止位置,j表示滑窗动窗口的起始位置,初始时都是 0
sum += nums[i] //加上该元素
// 注意这里使用for,每次更新 j(起始位置),并不断比较子序列是否符合条件
for sum >= target{
sublength := i - j + 1 //sublength滑动窗口的长度
if sublength < res { //res始终保存的是满足结果的连续子数组长度的最小值
res = sublength
}
sum -= nums[j] // 这里体现出滑动窗口的精髓之处,不断变更j(子序列的起始位置)
j++
}
}
if res == n+1 {
res = 0
}
return res
}
标签:窗口,209,res,位置,起始,数组,滑动,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17374514.html