题目:给定一个含有
n
个正整数的数组和一个正整数target
。找出该数组中满足其总和大于等于
target
的长度最小的 连续子数组[numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回0
。
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
//滑动窗口法,窗口范围[i,j],增大j扩大窗口,若窗口元素和大于等于target,则尝试移动i压缩窗口
int i=0,result=INT32_MAX,sum=0;
int n=nums.size();
for(int j=0;j<n;j++)
{
sum+=nums[j];
while(sum>=target)
{
result=result<(j-i+1)?result:(j-i+1);
sum-=nums[i++];
}
}
//若result未更新,则说明无满足要求的子数组,返回0
return result==INT32_MAX?0:result;
}
};
时间复杂度:O(n) //从元素考虑,最坏的情况是每个元素都移入窗口一次,移出窗口一次
空间复杂度:O(1)