Skip to main content

209 Minimum Size Subarray Sum

Leetcode

Given an array of positive integers nums and a positive integer target, return the minimal length of a contiguous subarray [numsl, numsl+1, ..., numsr-1, numsr] of which the sum is greater than or equal to target. If there is no such subarray, return 0 instead.

Example 1:

Input: target = 7, nums = [2,3,1,2,4,3]
Output: 2
Explanation: The subarray [4,3] has the minimal length under the problem constraint.

Example 2:

Input: target = 4, nums = [1,4,4]
Output: 1

Example 3:

Input: target = 11, nums = [1,1,1,1,1,1,1,1]
Output: 0


滑动窗口。左右两个指针,移动右指针给窗口加入元素,窗口所有元素和大于 target ,记录此时的长度,然后不断移动左指针直到窗口元素和小于 target

public int minSubArrayLen(int target, int[] nums) {
int left=0, right=0;
int min=Integer.MAX_VALUE;
if(nums==null || nums.length==0) return min;
int sum=0;
while(right<nums.length || sum>=target){
if(sum>=target){
if(right-left<min) min=right-left;
if(min==1) return 1;
sum-=nums[left++];
} else if (sum<target){
sum+=nums[right++];
}

}
return min==Integer.MAX_VALUE?0:min;
}