js-数组中连续N个数和的最大值

242 阅读1分钟

数组中连续N个数和的最大值

// 长度为k的最大子数组
let arr = [1,2,3,4];

function sum(arr) {
    return arr.reduce((p,c) => p + c)
}
function getMax(arr, n) {
    let maxArr = [];
    for(let left = 0, right = n; right <= arr.length; left++,right++) { // 很少写两个...
        let max = sum(arr.slice(left, right)); 
        maxArr.push(max)
    }
    return Math.max(...maxArr)
}

getMax(arr,2)

纯算法实现


let arr = [1,3,4,5,1,2,9,2];
function getMax(arr, n) {
    let max = 0,
        sum = 0;
    for(let i = 0; i < arr.length -n; i++){
        if(i === 0){ // 计算初始的max
            for(let j = 0; j < n; j++) {
                max += arr[j]
            }
            sum = max
        } else { // 减前一个数, 加后一个数, 有点像冒泡...
            sum = sum - arr[i - 1] + arr[i - 1 + n];
            if(sum > max){
                max = sum;
            }
        }
    }
    return max
}