アイデア:動的計画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)を返す }