给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。
示例:
输入: s = 7, nums = [2,3,1,2,4,3]
输出: 2
解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。
#define min(a,b) ((a)<(b)?(a):(b))
int minSubArrayLen(int s, int* nums, int numsSize){
int R = 0 , L = 0 , sum = 0, res = 0x7fffffff;;
while(R < numsSize)
{
while(sum < s && R < numsSize)
{
sum += nums[R++];
}
while(sum >=s && L <= R)
{
res = min(res, R - L);
sum -= nums[L++];
}
}
return res == 0x7fffffff ? 0 : res;
}
思路:参考了一下题解大佬的答案,思路就是创建一个滑动窗口,小于s的时候右窗口滑动,大于s的时候左窗口滑动。