Minimum Size Subarray Sum
Description
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.
Example:
Input:s = 7, nums = [2,3,1,2,4,3]
Output: 2 Explanation: the subarray[4,3]
has the minimal length under the problem constraint.
Follow up:
If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log n).
Solution(javascript)
/** 暴力解法 O(n^2)
* @param {number} s
* @param {number[]} nums
* @return {number}
*/
// const minSubArrayLen = function (s, nums = []) {
// let min = Infinity
// for (let i = 0; i < nums.length; i++) {
// let sum = 0
// for (let j = i; j < nums.length; j++) {
// sum += nums[j]
// if (sum >= s) {
// min = Math.min(min, j - i + 1)
// break
// }
// }
// }
// return min === Infinity ? 0 : min
// }
// O(n) two pointers
const minSubArrayLen = function (s, nums) {
let sum = 0
let min = Infinity
let left = 0
for (let i = 0; i < nums.length; i++) {
sum += nums[i]
while (sum >= s) {
min = Math.min(i - left + 1, min)
sum -= nums[left]
left += 1
}
}
return min === Infinity ? 0 : min
}