【数组】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.

click to show more practice.

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;
};

 

posted @ 2016-01-08 22:14  很好玩  阅读(269)  评论(0编辑  收藏  举报