原文链接:https://leetcode-cn.com/problems/minimum-size-subarray-sum/
解题思路:
求出从第 0 个数字开始,总和大于等于 s 时的长度。
求出从第 1 个数字开始,总和大于等于 s 时的长度。
求出从第 2 个数字开始,总和大于等于 s 时的长度。
...
在求总和时候,可以利用 sums 数组,不需要累加。
比如求从第 i 个数字开始,总和大于等于 s 时的长度,我们只需要找从第 i + 1 个数字到第几个数字的和大于等于 s - nums[i] 即可。求 i + 1 到 j 的所有数字的和的话,前边已经说明过了,也就是 sums[j] - sums[i]
class Solution{
public int minSubArrayLen(int s, int[] nums) {
int len=0;
int i=0;
int sum=0;
for(int j=0;j<nums.length;j++){
sum+=nums[j];
while(sum>=s){
len=len==0?(j-i+1):Math.min(len,j-i+1);
sum -= nums[i];
i++;
}
}
return len;
}
}