题目描述
- 给定一个含有
n个正整数的数组和一个正整数 target
- 找出该数组中满足其和
≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度 。 如果不存在符合条件的子数组,返回 0
解题思路
- 这次代码给大家加了注释,之后也会加注释的
- 双指针法(快慢指针)
- 满足条件时移动慢指针
- 不满足条件时移动快指针
- 有点滑动窗口的意思,哈哈哈
解题代码(JavaSctipt)
var minSubArrayLen = function (target, nums) {
// nums数组长度
let len = nums.length;
// 当前数组和
let curSum = 0;
// 慢指针
let slow = 0;
// 快指针
let fast = 0;
// 最小数组长度
let minLen = 0;
while (fast < len) {
if (curSum + nums[fast] >= target) {
// (当前数组和)与(当前快指针元素)之和大于(目标值)
// 更新最小数组长度
minLen =
minLen === 0 ? fast - slow + 1 : Math.min(minLen, fast - slow + 1);
// 更新当前数组和
curSum -= nums[slow];
// 慢指针向右移动
slow++;
} else {
// 否则
// 更新当前数组和
curSum += nums[fast];
// 快指针向右移动
fast++;
}
}
return minLen;
};