今天来分享我做的一道题,是求长度最小的子数组(
上题目!


可以看到,本题要求在一个子数组里寻找满足要求的且长度最小的子数组的长度,注意,该子数组要是连续的,你不能是跳跃的。
我们可以采用滑动窗口的办法来解决这道题。
上代码(
int minSubArrayLen(int target, int* nums, int numsSize)
{
int sum = 0;
int len = 999999999; //设置超级大数
int i = 0; //设置head
int j = 0; //设置tail
for(i = 0; i < numsSize; i++) //从前往后挨个找最小长度
{
sum += nums[i]; //加和
while(sum >= target) //判断当前和是否大于等于目标值
{
int curlen = i - j + 1; //计算当前窗口长度
len = (len > curlen) ? curlen : len; //如果大于当前窗口长度,就更新值
sum -= nums[j]; //窗口向前滑动,要把原来的尾给减掉
j++; //尾更新
}
}
if(len != 999999999) //如果找到就返回len,否则返回0
return len;
else
return 0;
}
鼠鼠的思路就在这里了( 当然也是学习过后才会,不然只会暴力,那个进阶想不出来,有无大佬指点

1568

被折叠的 条评论
为什么被折叠?



