这道题的关键是保留start,以及sum如何变成下一步的sum.然后i<=nums.size()是为了防止i == nums.size()就跳出来了,说不定-nums[start]还是大于s。
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int start = 0;
int ans = INT_MAX;
int sum = 0;
int i = 0;
while(i<=nums.size())
{
if(sum < s)
{
if(i == nums.size()) break;
sum += nums[i];
i++;
}
else
{
ans = min(ans,i-start);
sum -= nums[start];
start++;
}
}
return ans != INT_MAX ? ans : 0;
}
};