没有仔细读懂题意,然后写了错误的代码,这里要求的是子数组,那么就是要求连续的
错误代码
这里的错误在于我直接开始排序了,倒序。选择最少的数字来满足题目要求,但是题目要求是子数组,这里就完全不满足题意了
var minSubArrayLen = function (target, nums) {
nums.sort((a, b) => b - a)
console.log(nums)
let sum = 0
for (let i = 0; i < nums.length; ++i) {
sum += nums[i]
if (sum >= target) {
return i + 1
}
}
return 0
};
正确代码
滑动窗口
滑动窗口来解决这一题,每次满足条件时记录最小的长度即可
left、right指针都向尾部移动
sum < target时,增大right,增大sum
sum >= target时,增大left,减小sum
var minSubArrayLen = function (target, nums) {
let left = 0
let sum = 0
let minLength = Infinity
for (let right = 0; right < nums.length; ++right) {
sum += nums[right]
while (sum >= target) {
minLength = Math.min(minLength, right - left + 1)
sum -= nums[left]
left++
}
}
return minLength === Infinity ? 0 : minLength
};