Leetcode09-medium-長度最小的子數組-JavaScript版

// medium 209 長度最小子數組

// 給定一個含有 n 個正整數的數組和一個正整數 s ,找出該數組中滿足其和 ≥ s 的長度最小的連續子數組。
// 如果不存在符合條件的連續子數組,返回 0。
//
// 示例:
// 輸入: s = 7, nums = [2,3,1,2,4,3]
// 輸出: 2
// 解釋: 子數組 [4,3] 是該條件下的長度最小的連續子數組。
// 進階:
//     如果你已經完成了O(n) 時間複雜度的解法, 請嘗試 O(n log n) 時間複雜度的解法。

/**
 * @param {number} s
 * @param {number[]} nums
 * @return {number}
 */
var minSubArrayLen = function(s, nums) {
    if (!nums.length) return 0;
    let sum = nums.reduce((p,n) => {
        return p+n;
    }, 0)
    if (sum < s) return 0;
    
    
    let left = 0, right = 1;
    let minLen = nums.length;
    while(left < nums.length && right <= nums.length){
        // 滑動窗口已經大於等於s,移動左指針
        if (sumFn(nums.slice(left, right)) >= s){
            if (right - left < minLen){
                minLen = right - left;
            }
            left++;
            
            
        }else{ // 滑動窗口還不夠大,右指針右移
            right++
        }
    }
    return minLen
};

let sumFn = (arr) => {
    return arr.reduce((p, n) => {
        return p+n;
    }, 0)
}

console.log(minSubArrayLen(7,[2,3,1,2,4,3]))

算法庫:https://github.com/cunzaizhuyi/js-leetcode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章