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
Constraints:
1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 105
Idea:
Two pointers + tracking min size
Solution:
/**
* @param {number} target
* @param {number[]} nums
* @return {number}
*/
var minSubArrayLen = function(target, nums) {
let l = 0;
let r = 0;
let ans = Infinity;
const n = nums.length;
let total = 0;
while (l < n) {
while(r < n && total < target) {
total += nums[r];
r++;
}
if (total < target) break;
ans = Math.min(ans, r - l);
total -= nums[l];
l++;
}
return ans === Infinity ? 0 : ans;
};