209. 长度最小的子数组
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; } };