题目
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
代码
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int sum = 0;
int length = 0, result = INT32_MAX; //返回最小 result设置大一点
for(int i = 0, j = 0; j < nums.size(); j++){
sum += nums[j]; //记录子序列的和
while(sum >= target){
length = j - i + 1; //记录子序列的长度
result = result < length ? result : length; //找到最小的子序列长度
sum -= nums[i++]; //i和j之间可能还存在大于target的子序列
}
}
return result == INT32_MAX ? 0 : result;
}
};