给一个数组arr和一个正整数s,找出其中长度最短的大于s的子数组。
分析这个题首先是连续子数组,可以用滑动窗口解决,最终要start到最后才结束遍历,所以可以用while循环,在每次end++后,都判断是否达到条件,达到条件则进入while循环来循环移动start直到不满足条件。
最终输出最小的min。
class Solution {
public int minSubArrayLen(int s, int[] nums) {
if(nums.length==0) return 0;
int start=0;
int end=0;
int sum=0;
int min=Integer.MAX_VALUE;
while(end<nums.length){
int x=nums[end];
end++;
sum+=x;
while(sum>=s){
min=Math.min(min,end-start);
sum-=nums[start];
start++;
}
}
return min==Integer.MAX_VALUE?0:min;
}
}