リストには1からNまでの番号があり、誤って追加された番号があります。したがって、合計でN +1の数があります。言語が処理できる最大の整数がNであると仮定します。繰り返し桁を見つけるための最速のアルゴリズムは何ですか?
注:これは宿題の問題ではありません。
私はすべての数値をxorし、完全なリストのxorがどうあるべきかをxorします。 (そのxorはNに依存し、理解するのは難しくありません。)
Xorには次のプロパティがあるため、これは機能します。
a xor b = b xor a
(a xor b) xor c = a xor (b xor c)
a xor 0 = a
さらに良いことに、表現のビット数を変更することなくそれを実行します。そして、xorはたまたまコンピューターで最速の操作の1つです。
したがって、その計算の結果は、リスト内の各数値をそれ自体のコピーとペアにし、それらをすべて一緒にxorしてから、mistkeによって挿入された余分な数値をペアにした場合と同じです。しかし、それは0になり、それ自体で何度もxoredされ、その後、余分な数でxoredされます。これはすべて余分な数になります。