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的情况。