一、思路
滑动窗口,先右边扩大窗口,直到子数组和大于S,然后左边开始缩小窗口直到子数组和小于S。每次大于等于S时,计算一下子数组内的元素个数,找出最小即可。
注意有两个边界条件需要考虑:
①给定空数组
②给定的数组中所有元素加起来,还是小于S
二、代码
1.python
代码如下:
class Solution:
def minSubArrayLen(self, s, nums) :
if not nums:
return 0
n = len(nums)
res = n + 1
i,j = 0, 0
count = 0
while j < n:
count += nums[j]
while count >= s:
res = min(j-i+1,res)
count -= nums[i]
i += 1
j += 1
return 0 if res == n + 1 else res
2.C++
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int n = nums.size();
if(n == 0){
return 0;
}
int res = n + 1, i = 0, j = 0;
int count = 0;
while(j < n){
count += nums[j];
while(count >= s){
res = min(res,j-i+1);
count -= nums[i];
i++;
}
j++;
}
if(res == n+1){
res = 0;
}
return res;
}
};