LeetCode 209.长度最小的子数组

328 阅读1分钟

LeetCode 209.长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

这个一个基础的双指针问题,可以通过两个指针的移动来移动数组。


/**
 * @param {number} target
 * @param {number[]} nums
 * @return {number}
 */
var minSubArrayLen = function(target, nums) {
    let sum = 0, res = 99999999;
    let slow = 0, len = 0;
    for(var fast = 0; fast < nums.length; fast ++) {
        sum += nums[fast];
        while(sum >= target) {
            // 核心代码块
            len = fast - slow + 1;
            if(len <= res) res = len;
            sum -= nums[slow++];
        }
    }
    if(res == 99999999) return 0;
    else return res;
};

先定义两个指针slow,fast,快指针不断前进直到找到区间大于目标值的点,然后进入核心代码块。 核心代码块会先记录本次的长度,然后和之前的长度进行比较,如果发现比之前的小,那么就更新数据 数据减去最前的数值,慢指针向后移动。

最后是一个特判,因为可能出现长度最小的数组就是0的情况。