力扣209-长度最小的子数组【学习笔记】

116 阅读1分钟

问题:给定一个正整数数组,找到总和大于等于目标值的最小子数组(连续)的长度,不存在则返回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
};