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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM