问题:给定一个正整数数组,找到总和大于等于目标值的最小子数组(连续)的长度,不存在则返回0
难点:左右指针什么情况下移动?
方法:双指针(滑动窗口)
思路:
右指针移动,直到发现子数组总和满足条件(大于等于目标值)时,记录长度,并循环右移左指针,计算区间内是否还满足条件
var minSubArrayLen = function(target, nums) {
let sum = 0
let len = Infinity
for(let left=0,right = 0;right<nums.length;right++){
sum+=nums[right]
while(sum>=target){
len = Math.min(len,right-left+1)
sum-=nums[left++]
}
}
return len<=nums.length?len:0
};