代码随想录算法训练营 | 第二天 | 博客打卡
题目链接:leetcode 209 长度最小的子数组
注:作为个人笔记,不可能做到细致通俗。
先 left 留在原地,right 向前移动,直到窗内元素之和大于等于目标值,进入内层循环。
然后 right 定在原地,换 left 向前移动,直到窗内元素之和小于目标值,退出内层循环。
left 停 right 动是一个循环,right 停 left 动是一个循环。
func minSubArrayLen(target int, nums []int) int {
subLen := len(nums) + 1
left, sum := 0, 0
for right := 0; right < len(nums); right++ {
sum += nums[right]
for sum >= target {
if subLen > right - left + 1 {
subLen = right - left + 1
}
sum -= nums[left]
left++
}
}
if subLen == len(nums) + 1 {
return 0
}
return subLen
}
right 指针可能跑到 left 前面吗?不可能。