给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其总和大于等于 target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
第一次写,越界了
int minSubArrayLen(int target, int* nums, int numsSize) {// 每次求和int count = nums[0];// 左指针int left = 0;// 右指针int right = 0;// 最小滑动窗口int min = numsSize + 1;while (left < numsSize && right < numsSize) {if (count < target) {right++;count = count + nums[right];} else {min = (right - left + 1) < min ? (right - left + 1) : min;left++;right = left;count = nums[left];}// 循环一行结束后,未找到符合条件的if (right == numsSize) {left++;count = nums[left];right = left;}}return min > numsSize ? 0 : min;
}
滑动窗口缩小
int minSubArrayLen(int target, int* nums, int numsSize) {// 每次求和int count =0;// 左指针int left = 0;// 右指针int right = 0;// 最小滑动窗口int min = numsSize+1;while (right < numsSize) {count+=nums[right];while(!(count<target)){min=(min>right-left+1)?(right-left+1):min;count-=nums[left];left++;}right++;}return min > numsSize ? 0 : min;
}