大家好,我花了一段时间与我的配对伙伴解决这个问题https://www.codewars.com/kata/playing-on-a-chessboard/train/ruby
它通过了每个测试,但最后有STDERR
说:
Process was terminated. It took longer than 12000ms to complete.
任何人都可以建议如何加快以下代码的速度或提高效率吗?
def game(n)
# lowest common multiplier
mult = (1..2*n).to_a.reduce(1,:lcm)
y = 1
x = 1
# numerator sum
numsum = 0
while y <= n
while x <= n
#
numsum += x * mult / (x + y)
x += 1
end
x = 1; y += 1
end
array = [Rational(numsum, mult).numerator, Rational(numsum, mult).denominator]
if array[1] == 1
[array[0]]
else
array
end
end
答案 0 :(得分:0)
请注意以下部分代码:
while y <= n
while x <= n
numsum += x * mult / (x + y)
x += 1
end
x = 1; y += 1
end
请注意,您有2个嵌套循环,每个循环都有n
次迭代
这意味着您的代码具有 O(n²)的复杂性(您可以阅读它here)。
因此,如果您使用game
的高值调用n
函数,则代码可能会挂起。
我建议你尝试重新考虑你的算法 可能存在另一种更有效的方法来解决您的问题。