我们需要编写一个 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