看了一个很好的解法,来分享一下:
方法:指针碰撞法
定义二个指针 l r
int minSubArrayLen(int target, int* nums, int numsSize) {
int l = 0;
int r = -1;//为什么会使用-1 因为下面使用的是++r ,并且可以防止越界
int sum = 0;
int minLen = numsSize + 1;//将minLen设置为最大值+1,方便判断返回0的情况
while( l != numsSize )
{//z注意r最大只能在numsSize-1处的下标
if( r + 1 != numsSize && sum < target ) sum += nums[++r];
else sum-= nums[l++];
if( sum >= target )//注意是>=因为==时,仍要判断是否满足情况
minLen = fmin(minLen,r-l+1);
}
if( minLen == numsSize + 1 )
return 0;
else return minLen;
}