要点
利用循环控制终止位置,动态移动初始位置,整个过程类似于平衡不平衡然后循环的过程(终止位置到达满足条件的点,初始位置移动到可以使得条件不满足的点,然后终止位置再次移动到达满足条件的点,初始位置又来破坏这种平衡,不断循环,直到遍历完整个数组)
实现
力扣 209.长度最小的子数组
var minSubArrayLen = function (target, nums) {
let i = 0
let sum = 0
// 取一个不可能到达的长度
let result = nums.length + 1
// j为终止位置,i为初始位置
for (let j = 0; j < nums.length; j++) {
sum += nums[j]
while (sum >= target) {
sum -= nums[i]
let tempLen = j - i + 1
result = result > tempLen ? tempLen : result
i++
}
}
return result === nums.length + 1 ? 0 : result
}