题目:
难度: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
};