Ruby阶乘代码运行得太慢

时间:2014-11-13 18:41:12

标签: ruby performance algorithm combinations

我正在研究this hackerrank challenge

我想尝试使用ruby的问题,这是我写的代码:

gets.to_i.times do
    num_people = gets.to_i
    num_people_factorial = (1..num_people).inject(:*) || 1
    numerator = num_people_factorial
    if num_people > 2
        denominator = 2*((1..num_people - 2).inject(:*) || 1)
    elsif num_people == 2
        denominator = 2
    else
        denominator = 10000    
    end
    puts numerator / denominator
end

问题是,当我在计算机上运行它时,我得到了正确的答案,但是当我通过Hackerrank的系统运行它时,测试用例超时 - 它们的执行速度不够快,无法进行评分。

如何优化此代码?

编辑:当我提交此代码时,我看到了这个结果:

enter image description here

1 个答案:

答案 0 :(得分:4)

你必须保持警惕以避免可怕的"XY" question!从标题中你可以假设你需要计算一个阶乘。为什么?你过分思考。问题是房间里是否有N人,将会发生多少次握手。 N人中的每一个人都与(N-1)人握手,但每次握手都算两次,所以答案是:

N*(N-1)/2

我无法确定,但我希望这会通过基准测试。

由于您可以快速轻松地计算出这个数字,即使没有电脑,计算器甚至纸和笔,您现在还有另一种方式可以在晚宴上给其他客人留下深刻的印象。