经过长时间的休息后,我正在练习我的编码技巧,并在 CodeWars 上遇到了这个套路
输入数组中的数字,返回其各部分的总和。例如:
def parts_sums(ls)
sums = []
until ls.size == 0
sums << ls.inject(:+)
ls.shift
end
sums << 0
end
######### INPUT #######
parts_sums([0, 1, 3, 6, 10])
######### EXPECTED OUTPUT ######
[20, 20, 19, 16, 10, 0]
0 + 1 + 3 + 6 + 10 = 20
1 + 6 + 3 + 10 = 20
3 + 6 + 10 = 19
6 + 10 = 16
10 = 10
0 = 0
我的解决方案解决了型,但是一旦我达到大约 30,000+ 的数组,我的解决方案就需要很长时间才能解决。
所以我的问题是对社区来说,我什至会尝试如何让它进行得更快。我知道递归通常很慢,for 循环及其变体通常足以完成工作。失败时会发生什么?有哪些方法可以让我的代码更快?
我正在寻找一些建议和一些示例(如果有人有的话)。感谢输入。谢谢。
最佳答案
def parts_sums(ls)
ls.each_with_object([ls.sum]) { |n,arr| arr << arr.last - n }
end
parts_sums([0, 1, 3, 6, 10])
#=> [20, 20, 19, 16, 10, 0]
关于ruby - 执行超时(12000 毫秒): How can I optimize this simple kata to run faster?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57047568/