思路:動態規划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) }