给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。c++代码
时间: 2024-01-21 08:20:15 浏览: 42
可以使用滑动窗口的方法来解决这道题目,具体步骤如下:
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;
}
};
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![md](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)