と仮定する整数であるようにすべてに対して、それぞれの出現特定の数を除く数は奇数です。発生が偶数である番号を見つけてください。
あり私たちはソート:アルゴリズムに、ブレーク要素の値がある多くの部分、には、同じため、各要素の出現回数を数えることができます。
最悪の場合 -time-and- -spaceアルゴリズムを見つけたい。
するとおよび、したがって、基数ソート許容されません。 ように、バイナリビット演算がます。
と仮定する整数であるようにすべてに対して、それぞれの出現特定の数を除く数は奇数です。発生が偶数である番号を見つけてください。
あり私たちはソート:アルゴリズムに、ブレーク要素の値がある多くの部分、には、同じため、各要素の出現回数を数えることができます。
最悪の場合 -time-and- -spaceアルゴリズムを見つけたい。
するとおよび、したがって、基数ソート許容されません。 ように、バイナリビット演算がます。
回答:
ここに単純なアルゴリズムのアイデアがあります。すべての発生を数えるだけです!
全体として、これは(割り当てという意味で)大量のメモリを使用する線形時間アルゴリズムを提供します。ここは、とは無関係に一定の時間でにランダムアクセスできることが重要です。
このアプローチでは、空間にバインドされた追加のはより困難になります。時間ルックアップを提供する辞書のデータ構造は知りません。予想ルックアップ時間(テーブルのサイズ、は格納されている要素の数)を使用した実装であるハッシュテーブルを使用できるので、予想どおり線形空間で任意に取得できます。すべての値が同じハッシュ値にマッピングされている場合は、失敗しています。
ほとんど平凡な解決策-スペースを使用しますが、ハッシュマップを使用することです。ハッシュマップには、要素を追加および検索するためのランタイムが償却されていることを思い出してください。
したがって、次のアルゴリズムを使用できます。
ハッシュマップ割り当てます。反復します。各要素、表示される出現回数、つまり増やし。
ハッシュマップのキーセットを反復処理し、どのキーに出現回数が偶数かを確認します。
これは、大きなトリックをまったく使用しない単純なアルゴリズムですが、これで十分な場合もあります。そうでない場合は、どのスペース制限を課すかを指定することをお勧めします。