法一:超时
int helper(int k,vector<int> &nums,int s)
{
for(int i=0;i<nums.size();i++)
{
int sum = 0;
for(int j=i;j<k+i&&j<nums.size();j++)
{
sum+=nums[j];
}
if(sum>=s)
return k;
}
return 0;
}
int minSubArrayLen(int s, vector<int>& nums) {
int flag = -1;
for(int i=1;i<=s;i++)
{
flag = helper(i,nums,s);
if(flag==0)
continue;
else
return flag;
}
return 0;
}
法二:
int minSubArrayLen(int s, vector<int>& nums)
{
int l,r,cur,res = nums.size()+1;
l = r = cur =0;
while(r<nums.size()) //右边坐标小于nums的长度
{
cur += nums[r++]; //每次累加cur
while(cur>=s)
{
res = min(r-l,res);//取最小的r-l 和res
cur -=nums[l++];// 减去最左边的值,继续判断
}
}
return res>nums.size() ? 0 : res;//小于nums.size()说明更新过res,否则没有满足条件的res,返回0
}