gpt4 book ai didi

javascript - 数组的部分总和 - JavaScript

转载 作者:数据小太阳 更新时间:2023-10-29 04:26:01 25 4
gpt4 key购买 nike

试图解决this challenge on codewars .根据挑战,数组的部分:

ls = [0, 1, 3, 6, 10]

ls = [0, 1, 3, 6, 10]
ls = [1, 3, 6, 10]
ls = [3, 6, 10]
ls = [6, 10]
ls = [10]
ls = []

我们需要返回一个包含这些部分之和的数组。

所以我的代码如下:

function partsSums(ls) {
let arrayOfSums = [];
while(ls.length > 0) {
let sum = ls.reduce((a, b) => a + b);
arrayOfSums.push(sum);
ls.shift();
}
return arrayOfSums;
}

console.log(partsSums([0, 1, 3, 6, 10]));

问题是它希望我们在数组为空时添加最后一个和 0。所以我们应该得到:

[ 20, 20, 19, 16, 10, 0 ]

代替

[ 20, 20, 19, 16, 10]

所以我尝试了这个:

function partsSums(ls) {
let arrayOfSums = [];
while(ls.length > 0) {
let sum = ls.reduce((a, b) => a + b);
arrayOfSums.push(sum);
ls.shift();
}
arrayOfSums.push(0);
return arrayOfSums;
}
console.log(partsSums([0, 1, 3, 6, 10]));

还有这个:

function partsSums(ls) {
ls.push(0);
let arrayOfSums = [];
while(ls.length > 0) {
let sum = ls.reduce((a, b) => a + b);
arrayOfSums.push(sum);
ls.shift();
}
return arrayOfSums;
}

但是这些导致了 Codewars 的执行超时错误:

Execution Timed Out (12000 ms)

所以我也尝试了:

function partsSums(ls) {
let arrayOfSums = [];
while(ls.length > -1) {
let sum = ls.reduce((a, b) => a + b);
arrayOfSums.push(sum);
ls.shift();
}
return arrayOfSums;
}

但是现在这会导致类型错误:

TypeError: Reduce of empty array with no initial value

我不理解当所有值都被移出时如何将 0 放入数组的概念。挑战似乎希望 0 作为数组的最终“总和”,即使数组为空也是如此。但是您不能减少空数组 - 我还能在这里做什么?

编辑:尝试将初始值添加到 reduce 方法:

function partsSums(ls) {
let arrayOfSums = [];
while(ls.length > 0) {
let sum = ls.reduce((a, b) => a + b, 0);
arrayOfSums.push(sum);
ls.shift();
}
return arrayOfSums;
}

不幸的是,这仍然没有通过基本测试:

expected [] to deeply equal [ 0 ]

最佳答案

没有理由一遍又一遍地计算总和。在长数组上,这将非常低效( O(n²) )并且可能会解释您的超时错误。在开始时计算总和,然后在循环中从中减去每个元素。

ls = [0, 1, 3, 6, 10]

function partsSums(ls) {
let sum = ls.reduce((sum, n) => sum + n, 0)
res = [sum]
for (let i = 1; i <= ls.length; i++){
sum -= ls[i-1]
res.push(sum )
}
return res
}
console.log(partsSums(ls))

关于javascript - 数组的部分总和 - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56739270/

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