209. 长度最小的子数组
O(n^2)
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int maxn=nums.size()+10;
if(nums.size()==0)
return 0;
if(nums.size()==1)
{
if(nums[0]>=s)
return 1;
else
return 0;
}
if(nums[0]>=s)
return 1;
int ans=maxn;
int sum1=0;
for(int i=0;i<nums.size();i++)
{
sum1+=nums[i];
int res=0;
int sum=0;
for(int j=i;j>=0;j--)
{
res++;
sum+=nums[j];
if(sum>=s)
break;
}
if(sum>=s)
ans=min(ans,res);
}
if(sum1<s)
return 0;
else
return ans;
}
};
O(n)滑动窗口
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int maxn=nums.size()+10;
if(nums.size()==0)
return 0;
if(nums.size()==1)
{
if(nums[0]>=s)
return 1;
else
return 0;
}
if(nums[0]>=s)
return 1;
int left=0,right=0;
int ans=maxn;
int sum=0;
while(right<nums.size())
{
if(sum+nums[right]<s)
{
sum+=nums[right];
++right;
}
else
{
ans=min(ans,right-left+1);
sum-=nums[left];
++left;
//cout<<"left="<<left<<"right="<<right<<endl;
}
}
return ans;
}
};