leetcode-209-长度最小的子数组

本文最后更新于:2022年6月22日 下午

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

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

思路:
双指针,滑动窗口,[j, i] ,判断sum - nums[j] >= target来决定是否删除窗口末尾的值.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
// 双指针
int res = INT_MAX;
int sum = 0;

for (int i = 0, j = 0; i < nums.size(); i++)
{
sum += nums[i]; // 窗口右端点向右移动1位

// 判断窗口左端点是否可以删除
while (sum - nums[j] >= target) {
sum -= nums[j]; // 删除窗口最左边的数字
j++;// 窗口左端点向右移动1位
}

if (sum >= target) res = min(res, i - j + 1);
}

// 如果不存在符合条件的子数组,则res的初值从未更新过
if (res == INT_MAX) return 0;
else return res;
}
};

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-size-subarray-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。