gpt4 book ai didi

javascript - 如何更有效地从 CodeSignal 获得 arrayMaxConsecutiveSum?

转载 作者:行者123 更新时间:2023-12-05 01:08:15 25 4
gpt4 key购买 nike

我正在解决 CodeSignal 上的一些问题。我遇到了这个,arrayMaxConsecutiveSum。我让它通过了几乎所有的测试,但它在最后一个测试中超时。如果我将测试移动到自定义测试中,它会通过那里,所以我不确定该怎么做。如何更好地对其进行编码以使其不会超时?

问题:

Given array of integers, find the maximal possible sum of some of its k consecutive elements.
Example:
For inputArray = [2, 3, 5, 1, 6] and k = 2, the output should bearrayMaxConsecutiveSum(inputArray, k) = 8. All possible sums of 2 consecutive elements are:
2 + 3 = 5;
3 + 5 = 8;
5 + 1 = 6;
1 + 6 = 7.
Thus, the answer is 8.

function arrayMaxConsecutiveSum(inputArray, k) {
let max = 0;

for(let i = 0; i < inputArray.length; i++){
let sum = 0;
let newArr = inputArray.slice(i, i + k);
sum = newArr.reduce((accumulator, currentVal) => accumulator + currentVal);
if(sum > max){
max = sum;
}
}

return max;
}

错误:测试通过:19/20。测试 20 超出执行时间限制:程序超出执行时间限制。对于任何可能的输入,确保它在几秒钟内完成执行。

最佳答案

你当前的算法是 O(n ^ 2) 因为它需要一个嵌套循环。

您可以改为使用滚动总和使其 O(n)。从元素 0 到 k 的总和开始,然后在每次迭代中,减去构成总和的最早元素并添加尚未包含在总和中的下一个元素。

例如,k 为 2:

  • 从元素 [0] 和 [1] 的总和开始
  • 减[0],加[2],比较新的和
  • 减[1],加[3],比较新的和

等等。

function arrayMaxConsecutiveSum(inputArray, k) {
let rollingSum = inputArray.slice(0, k).reduce((a, b) => a + b);
let max = rollingSum;
for(let i = 0; i < inputArray.length - k; i++){
rollingSum += inputArray[i + k] - inputArray[i];
max = Math.max(max, rollingSum);
}
return max;
}

console.log(arrayMaxConsecutiveSum([2, 3, 5, 1, 6], 2));

关于javascript - 如何更有效地从 CodeSignal 获得 arrayMaxConsecutiveSum?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66202105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com