DBC练习9 -计算缺失的数字

  • 本文关键字:数字 计算 练习 DBC ruby
  • 更新时间 :
  • 英文 :


练习9 - 45分钟

给你一个从1到10000的序号列表,但是它们都是乱序的;此外,名单上少了一个数字。目标是找出丢失的数字。用通俗易懂的英语写出你解决这个问题的策略。尽量简洁。

编写Ruby代码,将此数字列表作为参数,并返回缺失的数字

我最初的印象是某种排序函数将帮助我将数组排序,但后来我重读了这个问题,它不是要求排序的序列,而是要求缺失的数字。下一步要考虑的是如何确定下一个序列的数字,我想到了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)

最新更新