0

演習は次のとおりです。

1 から 10,000 までの連番のリストが与えられましたが、それらはすべて順不同です。さらに、1 つの番号がリストから欠落しています。このタスクの目的は、欠落している数を見つけることです。

この問題に対する戦略は、配列内の要素を合計し、次に 1 から 10,000 の範囲を合計し、差を引くことです。これは欠落数と同じです。1..nからの範囲の合計を計算する式n(n+1)/2

これは私の現在のアプローチです:

def missing_number(array)
  sum = 0
  array.each do |element|
  sum += element
  end

  ((10000*10001)/2) - sum
end

つまずいたのは、次のような配列を入力したときの出力です。

puts missing_number(*1..10000) #=> 0 

なぜこれが起こるのですか?

ありがとう!

4

4 に答える 4

1

可読性のためにパフォーマンスが重要でない場合、問題を解決するための代替アプローチ:

def missing_number(array)
  (1..10_000).to_a - array
end
于 2013-05-26T07:31:16.227 に答える