Goland滑动窗口
原题链接:最小滑动窗口
维护一个最小的滑动窗口,需要判断这个窗口的sum值是否大于给定的target,如果不大于则一直往数组右方元素累加至大于或等于target值即可
大于或等于时,则需要得到当前滑动窗口的长度,判断是不是长度最小的滑动窗口,如果是则将该窗口长度赋值给result变量用于返回
如果不是则需要减掉滑动窗口最左侧的元素,代表滑动窗口最左则的元素为i,则i++代表了滑动窗口最左则元素减少。
减小掉了窗口最左则的元素,那么滑动窗口总值sum也要减去元素的值,所以也就是sum -=nums[i]
此时反复判断sum是否还大于target,如果大于或等于则继续重复。如果是小于,则回到外层for循环sum+=nums[j]将滑动窗口往右侧扩容一个元素
直到滑动窗口最右侧元素nums[j]碰到末尾
此时判断result是否是原数组大小,如果是则返回0
如果不是则返回result
代码块:
func minSubArrayLen(target int, nums []int) int {i := 0l := len(nums)sum :=0result := l+1 //在没有最小子数组的情况下滑动窗口等于nums数组的长度大小for j:=0; j<l;j++{sum+=nums[j] //起始综合数 用于判断是否大于targetfor sum >= target{subLength := j-i +1 //最小滑动窗口长度if subLength < result{//如果最小滑动窗口长度小于默认nums数组长度大小result = subLength//此时讲result替换为subLength,更新最小滑动窗口长度}sum -= nums[i]//为了不断探索最小滑动窗口,所以需要减去滑动窗口最右边也就是最大的数组元素i++}}if result == l + 1{//滑动窗口之为数组大小,则代表没有最小子数组return 0}else{return result}
}