长度最小的子数组用c++写
时间: 2024-09-29 07:11:11 浏览: 34
长度最短的子数组C++实现
在C++中,找到长度最小子数组使得所有元素都是正数可以使用滑动窗口算法解决。这是一个经典的问题,通常用于面试题中。以下是一个简单的C++解决方案:
```cpp
#include <vector>
#include <climits>
std::size_t shortestSubarrayWithPositiveElements(const std::vector<int>& nums) {
int sum = 0; // 当前窗口的和
std::size_t min_len = INT_MAX; // 最小子数组长度初始化为最大值
for (std::size_t i = 0; i < nums.size(); ++i) {
if (nums[i] > 0) {
sum += nums[i]; // 如果当前元素是正数,增加和
} else {
if (sum == 0) { // 如果窗口内全是负数,清零并更新最小长度
sum = nums[i];
} else {
sum -= nums[i - 1]; // 移除窗口左侧第一个负数
}
}
min_len = std::min(min_len, i + 1); // 更新最小长度,如果和大于0,说明窗口内都是正数
}
return min_len == INT_MAX ? 0 : min_len; // 返回最小长度,如果没有满足条件的子数组,返回0
}
阅读全文