Minimum Size Subarray Sum
Given an array of n positive integers and a positive integer s, find the minimal length of a 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.
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
sliding window
1. use two pointers start and end.
2. If sum < target, move the end pointer to right
3.If sum >= target, move the start pointer to left.
4.calculate the minLength using the start and end pointer.
public class Solution {
public int minSubArrayLen(int s, int[] nums) {
if (nums == null || nums.length == 0)
return 0;
int start = 0;
int end = 0;
int sum = 0;
int minLength = Integer.MAX_VALUE;
while (end < nums.length) {
while (sum < s && end < nums.length) sum += nums[end++];
if (sum < s) break;
while (sum >= s && start < end) sum -= nums[start++];
minLength = Math.min(minLength, end - start + 1);
}
return minLength == Integer.MAX_VALUE ? 0 : minLength;
}
}
public class Solution {
public int minSubArrayLen(int s, int[] nums) {
if (nums == null || nums.length == 0)
return 0;
int start = 0;
int end = 0;
int sum = 0;
int minLength = Integer.MAX_VALUE;
while (end < nums.length) {
while (sum < s && end < nums.length) sum += nums[end++];
if (sum < s) break;
while (sum >= s && start < end) sum -= nums[start++];
minLength = Math.min(minLength, end - start + 1);
}
return minLength == Integer.MAX_VALUE ? 0 : minLength;
}
}