您已获得1到10,000的序列号列表,但它们全部乱序;此外,列表中缺少1个号码。目标是找出丢失的号码。用简单的英语写出你解决这个问题的策略。尽可能简洁。
编写Ruby代码,将此数字列表作为参数,并返回缺少的数字。
答案 0 :(得分:0)
我最初的印象是某种排序函数会帮助我按顺序排列数组,但后来我重新阅读了问题而不是要求排序序列,它要求丢失数字。下一步要考虑的是如何确定下一个序列的数字,我想到了Chris Pine的书中的99瓶挑战,并意识到“n + 1”或“n - 1”将成为其中的一部分。解决方案,以及以1开头并以10,000(1..10,000)结尾的'范围声明'。
我接下来考虑索引,并且我需要使用#upto或#each来遍历范围,以确定缺少的数字以及允许我返回缺失值的某种条件语句。我将定义一个方法“missing_number”,但输入是什么?
是阵列吗?还是一个范围?我将使用数组,因为大多数时候数组都是未排序的,当我测试它时,我会将输入定义为范围。
经过一番研究后,我发现了一个策略,表明关键步骤是将数组中的所有数字相加并减去
与给定范围之和的差异。这很有意义,因为你正在处理一个常量值,所以我选择了这种方法 通知代码。
def missing_number(array)
grand_sum = (array.length + 1) * (array.length + 2) / 2
sum = 0
array.each {|n| sum += n}
grand_sum - sum
end
x=(1..10000).to_a
x.delete rand(10000)
puts missing_number(x)