提问人:Kamo 提问时间:10/22/2023 最后编辑:T.J. CrowderKamo 更新时间:10/22/2023 访问量:96
将一个数字与数组中的其他数字相加
Sum a number with others in array
问:
我得到了一个数字数组,.[5,1,3, etc, etc]
我想将结果求和并保存在名为 的新数组中,然后求和并保存结果,然后求和直到到达最后一个数字。5+1
results
5+3
5+etc
之后,我想总结并保存结果。1+3
然后求和到最后。1+etc
然后求和,直到我到达最后一个,依此类推......3+etc
但我不想用数字本身来求和。
数组中数字的顺序并不重要,重要的是返回的数组中是否存在预期的数字。results
我想在不使用嵌套循环的情况下实现这一点,以保持线性时间复杂度。
例子:
- 对于输入,我期望(按任何顺序),因为 、 和 。
[5,1,3
[6, 8, 4]
5+1=6
5+3=8
1+3=4
- 对于我期望的输入(按任何顺序),因为 、 、 、 和 。
[5,1,3,2]
[6, 8, 7, 4, 3, 5]
5+1=6
5+3=8
5+2=7
1+3=4
1+2=3
3+2=5
我试过这个:
function sumTwo(arr) {
const results = []
for(let i = 0; i < arr.length - 1; i++) {
let sum = arr[i] + arr[i + 1]
results.push(sum)
}
console.log(results)
}
console.log(sumTwo([5, 1, 3]));
...但它给了我错误的输出(而不是)。[6,4]
[6,8,4]
答:
-5赞
grief kid
10/22/2023
#1
在为第一个元素创建结果时,可以创建第二个结果。
当您为第一个元素创建第二个结果时,您可以忽略第一个元素,这是第二个元素的第一个结果,等等......
你知道的?
评论
0赞
Kamo
10/22/2023
在这样做时,每个元素总和都会有自己的数组?
0赞
grief kid
10/22/2023
是的,这是正确答案。我不知道-1是什么!
5赞
Ayoub k
10/22/2023
#2
您可以稍微优化代码,使其在 O(n^2) 边界内更有效率。一种可能的方法是使用滑动窗口的概念。但同样,它不会将时间复杂度降低到 O(n)。
function sumTwo(arr) {
const results = [];
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
results.push(arr[i] + arr[j]);
}
}
return results;
}
const output = sumTwo([5, 1, 3]);
console.log(output); // outputs: [6, 8, 4]
这不会帮助你逃避 O(n^2) 时间复杂度。我不确定您是否可以在不使用嵌套循环的情况下获得所需的结果。
评论
0赞
Kamo
10/22/2023
我知道这种方法是二次的,尽管我需要一种方法来实现它是线性的。
2赞
pilchard
10/22/2023
@Kamo 要完成的总和是二次,因此任何解都将是 O(n^2)
上一个:DFS 最终进入无限循环
下一个:要排序的二进制字符串的最小替换项
评论