题目:
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
示例:
输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。
方法:滑动窗口
类似双指针,右端点扩展,for循环计算sum,当sum>=target时保存数组长度,用while循环压缩左端点直到数组长度最小,输出
遇到的问题及解决方法:
·不知如何对比返回长度的大小
minlength=minlength<colenght?minlength:colenght;
·不知如何表示在不符合条件时返回
int minlength = INT_MAX;
return minlength==INT_MAX?0:minlength;
代码:
int minSubArrayLen(int target, int* nums, int numsSize){
int minlength = INT_MAX;//用于判断是否存在符合条件的子数组
int sum=0;
int left=0,right=0;
for(;right<numsSize;right++){
sum+=nums[right];
while(sum>=target){
int colenght=right-left+1;//记录此时的长度
if(minlength>colenght)minlength=colenght;
//简便写法:minlength=minlength<colenght?minlength:colenght;
sum-=nums[left];
left++;
}
}
return minlength==INT_MAX?0:minlength;
}