使用 JavaScript 計算迴圈陣列中的最大子陣列和


問題

我們要求編寫一個 JavaScript 函式,它接收一個整數陣列 arr 作為第一個且唯一一個引數。

我們可以將此陣列 arr 視為一個迴圈陣列,這意味著該陣列的最後一個元素後面將跟著第一個元素。我們的函式應該找到並返回 arr 中一個非空子陣列的最大可能和。

例如,如果函式的輸入是

輸入

const arr = [2, -2, 3, -1];

輸出

const output = 4;

輸出解釋

因為所需的子陣列是 [3, -1, 2]

示例

 現場演示

const arr = [2, -2, 3, -1];
const maxSubarraySumCircular = (arr = []) => {
   let max = arr[0]
   let min = arr[0]
   let currentMax = max
   let currentMin = min
   let sum = arr[0]
   for (let i = 1; i < arr.length; i++) {
      currentMax = arr[i] + Math.max(currentMax, 0)
      max = Math.max(max, currentMax)
      currentMin = arr[i] + Math.min(currentMin, 0)
      min = Math.min(min, currentMin)
      sum += arr[i]
   }
   return max < 0 ? max : Math.max(max, sum - min)
}
console.log(maxSubarraySumCircular(arr));

輸出

4

更新時間: 2021-04-23

158 次瀏覽

啟動您的職業生涯

完成課程並獲得認證

立即開始
廣告
© . All rights reserved.