目录
题目如下:
输入输出:
思路:
题目链接:209. 长度最小的子数组 - 力扣(LeetCode)
题目如下:
输入输出:
思路:
使用快慢指针,设置指针end 和start指针,一开始end和start从0开始,以及区间最小长度minLen变量设为Integer.MAX_VALUE,sum变量是指satrt到end区间累加的值,sum是要target比较大小,s为target值。
end一直右移直到sum累加大于等于s,比较当前区间长度与变量minLen大小取最小的值。
通过一个while循环缩小start和end区间,要满足sum>=target,找minLen最小值,不满足sum>=sum则终止循环,end指针继续右走。
一直循环上面操作,有minLen返回否则返回0
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int minLen=Integer.MAX_VALUE,end=0,start=0,sum=0;
for(;end<nums.length;end++){
sum+=nums[end];
while(sum>=target){
minLen=Math.min(end-start+1,minLen);
sum-=nums[start];
start++;
}
}
return minLen==Integer.MAX_VALUE?0:minLen;
}
}