js A配列の連続するサブ配列の最大合計を見つける

アイデア:動的計画DP

再帰式DP [i] = max(DP [i-1]、A [i]);

 // 入力[-2,1,3、-1、-6] 
 // 出力:[1,3] 4 
関数 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]; 
        } 
    } 
    Math.max(... dp)を返す
}

 

おすすめ

転載: www.cnblogs.com/ajaxkong/p/12731491.html