varminSubArrayLen=function(target, nums){// 长度计算一次const len = nums.length;let l = r = sum =0,
res = len +1;// 子数组最大不会超过自身while(r < len){
sum += nums[r++];// 窗口滑动while(sum >= target){// r始终为开区间 [l, r)
res = res < r - l ? res : r - l;
sum-=nums[l++];}}return res > len ?0: res;};
constminSubArrayLen=(s, nums)=>{let minLen =Infinity;let i =0;let j =0;let sum =0;while(j < nums.length){// 主旋律是扩张,找可行解
sum += nums[j];while(sum >= s){// 间歇性收缩,优化可行解
minLen = Math.min(minLen, j - i +1);
sum -= nums[i];
i++;}
j++;}return minLen ===Infinity?0: minLen;// 从未找到可行解,返回0};
varminSubArrayLen=function(target, nums){let left =0,
sum =0;let minLength = Number.MAX_VALUE;for(let right =0; right < nums.length; right++){// 由于数组中的所有数字都是正整数,因此在子数组中添加新的数字能得到更大的子数组之和
sum += nums[right];// sum>=target 已经是找到了可行解了while(left <= right && sum >= target){// 移动左边界,在可行解里面寻找最优解
minLength = Math.min(minLength, right - left +1);
sum -= nums[left++];}}return minLength == Number.MAX_VALUE?0: minLength;};
方法二:暴力解法
//暴力解法varminSubArrayLen=function(target, nums){let result =Infinitylet nums_length = nums.length
let sum =0;for(let i =0;i<nums_length;i++){
sum =0;for(let j=i;j<nums_length;j++){
sum+=nums[j]if(sum>=target && j-i+1<result){
result = j-i+1break}}}return result===Infinity?0:result
};