これはインタビューの質問です: 、、および でSetクラスを実装します。getputgetRandom
次のオプションを検討します。
- ソート済み/未ソートの連結リスト:
get- O(N),put- O(N),getRandom- O(N) - ソートされていないベクトル (サイズ変更可能な配列):
get- O(N),put- ?,getRandom- O(1) - ソートされたベクトル (サイズ変更可能な配列):
get- O(logN),put- ?,getRandom- O(1) - ハッシュテーブル:
get- O(1),put- O(1),getRandom- O(テーブルサイズ) - 平衡二分探索木:
get- O(logN),put- O(logN),getRandom- O(N)
最良の候補は次のようです。
get/putよりもはるかに頻度が高い場合は、ハッシュ テーブルgetRandomgetRandomよりもはるかに頻繁な場合は、並べ替えられたベクトル (サイズ変更可能な配列)get/put
ベクトルとハッシュ テーブルを何らかの方法で組み合わせて、より良いセットを構成できないかと考えています。