由于是区间问题,考虑到使用滑动窗口。
下面是我刚开始写的代码,虽然能通过,但是思维紊乱,循环条件应该去盯着满足情况下的条件,然后每次都去比较最小值,这样比较简洁。
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int n=nums.size();int left=0;int sum=0;int ans=INT_MAX;for(int i=0;i<n;i++){sum+=nums[i];if(sum>=target){while(sum>=target && left<i){sum-=nums[left];left++;}if(left==i && nums[left]>=target){ans=1;}else{ans=min(ans,i-left+2);}}}if(ans==INT_MAX){return 0;}else{return ans;}}
};
改进之后:
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int n=nums.size();int left=0;int sum=0;int ans=INT_MAX;for(int i=0;i<n;i++){sum+=nums[i];while(sum>=target){ans=min(ans,i-left+1);sum-=nums[left];left++;}}return ans==INT_MAX? 0:ans;}
};