【数组】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.
More practice:
If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log n).
思路:
两个指针, start end, end向后走,直到 sum 大于 s. 然后start向后, 直到sum 小于s. 同时更新 min值。
/** * @param {number} s * @param {number[]} nums * @return {number} */ var minSubArrayLen = function(s, nums) { var l=0,r=0,min=2147483647,sum=0; while(r<nums.length&&l<=r){ while(r<nums.length&&sum<s){ sum+=nums[r++]; } while(l<=r&&sum>=s){ min=Math.min(min,r-l); sum-=nums[l++]; } } return min==2147483647?0:min; };