由于nums为正整数,前缀和具有单调性,可以利用双指针优化,很好想
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int n = nums.size();
vector<int> preSum(n+1);
for(int i=1;i<=n;i++) preSum[i] = preSum[i-1] + nums[i-1];
if(preSum[n]<s) return 0;
int res = n;
for(int i=0,j=0;j<=n;j++){
while(i<j&&preSum[j]-preSum[i]>=s){
res = min(res,j-i);
i++;
}
}
return res;
}
};