给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。c++代码
时间: 2024-01-21 15:20:15 浏览: 130
可以使用滑动窗口的方法来解决这道题目,具体步骤如下:
1. 定义两个指针 left 和 right,分别表示滑动窗口的左右边界;
2. 初始化 left 和 right 为 0,sum 为 0;
3. 当 right < n 时,执行以下循环:
- 将 nums[right] 加入到 sum 中;
- 当 sum >= target 时,更新结果 res = min(res, right - left + 1),并将 left 指针向右移动一位,将 nums[left] 从 sum 中减去;
- 将 right 指针向右移动一位;
4. 返回结果 res。
以下是对应的 C++ 代码实现:
```c++
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int n = nums.size();
int left = 0, right = 0;
int sum = 0, res = INT_MAX;
while (right < n) {
sum += nums[right];
while (sum >= target) {
res = min(res, right - left + 1);
sum -= nums[left++];
}
right++;
}
return res == INT_MAX ? 0 : res;
}
};
```
阅读全文