由于是区间问题,考虑到使用滑动窗口。
下面是我刚开始写的代码,虽然能通过,但是思维紊乱,循环条件应该去盯着满足情况下的条件,然后每次都去比较最小值,这样比较简洁。
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;
}
};