原文:209. 长度最小的子数组(leetcode 解题) - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/leetcode/leetcode-javascript-solution-0209/

题目:

难度:Middle

相关话题:数组双指针二分查找

给定一个含有n 个正整数的数组和一个正整数s , 找出该数组中满足其和≥ s 的长度最小的连续子数组 如果不存在符合条件的连续子数组,返回 0。

示例:

输入: s = 7, nums = [2,3,1,2,4,3]
输出: 2
解释:子数组[4,3]是该条件下的长度最小的连续子数组。

进阶:

如果你已经完成了O (n ) 时间复杂度的解法, 请尝试O (n log n ) 时间复杂度的解法。

/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
 * @param {number} s
 * @param {number[]} nums
 * @return {number}
 */
var minSubArrayLen = function(s, nums) {
  let min=Infinity
  let sum=0
  let j=0
  for(let i=0;i<=nums.length;i++){
    sum+=nums[i]
    while(sum>=s){
      min=Math.min(i-j+1,min)
      sum-=nums[j++]
    }
  }
  return min===Infinity?0:min
  // let aux=[]
  // for(let i=0;i<nums.length;i++){
  //   if(nums[i]>=s)return 1
  //   aux[i]=nums[i]
  // }
  // let step=2
  // let helper=[]
  // while(step<=nums.length){
  //   for(let i=step-1;i<nums.length;i++){
  //     helper[i]=aux[i-1]+nums[i]
  //     if(helper[i]>=s)return step
  //   }
  //   aux=helper
  //   helper=[]
  //   step++
  // }
  // return 0
};