js 求A数组的连续子数组最大和

思路:动态规划DP

递推公式 DP[i] = max( DP[i-1], A[i] );

 // input [-2,1,3,-1,-6]
 // output: [1,3]  4
function maxSum(arr = []) {
    let tempSum = 0;
    let maxSum = 0;
    for (let i = 0; i < arr.length; i++) {
        tempSum += arr[i];
        if (tempSum > maxSum) {
            maxSum = tempSum;
        } else if (tempSum < 0) {
            tempSum = 0;
        }
    }
    return maxSum;
}

可以用JS Math方法简化代码

function maxSum3(arr = []) {
    let tempSum = 0;
    let maxSum = 0;
    for (let i = 0; i < arr.length; i++) {
        tempSum = Math.max(tempSum + arr[i], arr[i]);
        maxSum = Math.max(tempSum, maxSum)
    }
    return maxSum;
}

或者打印定义临时数组dp

function maxSum2(arr = []) {
    let dp = [];
    for (let i = 0; i < arr.length; i++) {
        if (dp[i - 1] > 0) {
            dp[i] = dp[i - 1] + arr[i];
        } else {
            dp[i] = arr[i];
        }
    }
    return Math.max(...dp)
}

猜你喜欢

转载自www.cnblogs.com/ajaxkong/p/12731491.html
今日推荐