题目描述
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
解题思路
要求时间复杂度O(N),所以一次循环扫描数组,类似滑动窗口,将每个元素插入数组后面并计算当前,当总和大于等于target时,从前往后删除元素直到数组内的元素之和刚好大于等于target,计算当前长度和最小长度比较,保留最小长度。遍历一遍过后,即可留下最短的连续数组
代码
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
vector<int> result;
result.push_back(0);
int min = 10001;
int count = 0;
int left = 0;
for(int i=0;i<nums.size();i++){
result.push_back(nums[i]);
count += nums[i];
while(1){
if(count-nums[left] >=target){
count = count-nums[left];
left++;
}
else{
break;
}
}
int temp = result.size()-1-left ;
if(count>=target && temp<min) min = temp;
}
if(min == 10001) min = 0;
return min;
}
};