题目:
Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray of which the sum ≥ s. If there isn't one, return 0 instead.
For example, given the array [2,3,1,2,4,3] and s = 7,
the subarray [4,3] has the minimal length under the problem constraint.
这道题目很简单,目的是寻找和大于等于target的最小子串长度,我们只需要使用一个游标来标识子串起点,然后用sum记录当前子串和。此外需要注意的是当sum大于target时,我们需要写一个循环来将起点不断向右移动。代码如下所示;
public int minSubArrayLen(int s, int[] nums) {
int left=0, sum=0, min = Integer.MAX_VALUE;
for(int i=0; i<nums.length; i++){
sum += nums[i];
while(sum >= s) {
min = Math.min(min, i - left + 1);
sum -= nums[left++];
}
}
if(min == Integer.MAX_VALUE)
return 0;
return min ;
}