给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其总和大于等于 target
的长度最小的
子数组
[numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int left=0;
int sum=0;
int result=Integer.MAX_VALUE;
for( int right=0;right<nums.length;right++){
sum+=nums[right];
while(sum>=target){
result=Math.min(result,right-left+1);
sum-=nums[left++];
}
}
return result == Integer.MAX_VALUE ? 0:result;
}
}
java的代码如上,我的理解就是:弄个右指针和左指针,和一个result弄最大,然后用右指针遍历数组,当sum求和达到target时,就把right-left+1得到的长度返回,跟result比,小的的留下,如果sum一直大于target,那么就增加left缩短长度,看能不能大于等于target,如果不行则退出while循环,继续累加right指针,以此类推,最后得到最短长度的。谢谢观看!