题目
题解
用滑动窗口不会超出时间限制
普通的暴力解法过不了了
i : 起始位置
j : 终止位置
只要sum加到大于等于target就进来循环,每次都减去起始位置的数,count是每次的长度,让i滑动起来,i++
终止条件就是sum < target,就拿到最终的长度了
代码
#define MIN(x,y) x < y ? x : y;
int minSubArrayLen(int target, int* nums, int numsSize)
{
int n = numsSize;
int sum = 0;
int i = 0,count = 0;
int lenth = INT_MAX;
//滑动窗口
for(int j = 0;j < n;j++)//一个范围
{
//j 终止位置
//i 起始位置
sum += nums[j];
while(sum >= target)
{
sum -= nums[i];//每次缩小范围
count = j - i+1;//数组的长度
lenth = MIN(lenth,count);
i++;
}
}
return lenth == INT_MAX ? 0 : lenth;
}