剑指 Offer II 008. 和大于等于 target 的最短子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
双指针,定义滑动窗口
循环条件是左指针《右指针,右指针《=n
计算sum,依次加右指针的元素,如果sum满足要求,把长度ans最小进行min判断
因为此时已经找到一个最小长度,但是还要判断有没有更小的,所以把sum再减去上一次加上的
然后左指针++,如果还满足则迭代此过程,如果不满足,右指针++,然后迭代外层循环,最后
判断最小长度是否等于原先初始化值,等于为0,不等于为ans
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int n=nums.length;
if(n==0){
return 0;
}
int left=0,right=left ;
int sum=0;
int ans=Integer.MAX_VALUE;
while(left<=right&&right<n){
sum+=nums[right];
while(sum>=target){
ans=Math.min(ans,right-left+1);
sum-=nums[left++];
}
right++;
}
return ans==Integer.MAX_VALUE?0:ans;
}
}