209. 长度最小的子数组
题目描述:给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
考察重点:快慢指针——滑动窗口
方法概括:通过滑动窗口查找数组内满足条件的最短子数组
func MinSubArrayLen(target int, nums []int) int {
res := 0
minLen := math.MaxInt32
slow := 0 //slow ,quick 双指针滑动窗口
for quick := 0; quick < len(nums); quick++ {
res += nums[quick] //quick每次向后一个,加入新元素
for res >= target { //因为quick++导致窗口总和超出target,则通过slow++减少窗口总和
if minLen > quick-slow+1 { //如果当前长度小于minLen,则替换
minLen = quick - slow + 1
}
res -= nums[slow]
slow++
}
}
if minLen == math.MaxInt32 { //如果无法达到target,返回0
return 0
}
return minLen
}