使用 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.