[Leetcode] 705.デザイン-ハッシュセット(シミュレーション)[シンプル]

リンク

https://leetcode-cn.com/problems/design-hashset/

時間がかかる

問題解決:11分
問題解決:10分

題名

組み込みのハッシュテーブルライブラリを使用せずにハッシュセット(HashSet)を設計します。

MyHashSetクラスを実装します。

  • void add(key)値キーをハッシュコレクションに挿入します。
  • bool contains(key)この値キーがハッシュセットに存在するかどうかを返します。
  • void remove(key)指定された値キーをハッシュセットから削除します。ハッシュセットにそのような値がない場合、何も行われません。

促す:

  • 0 <=キー<= 1 0 6 10 ^ 61 06
  • 1 0 4 10 ^ 4まで呼び出す1 04追加、削除、および含む。

アイデア

線形ハッシュが使用されます。最大キーは10 6 10 ^ 6であることがわかっているためです。1 06なので、衝突を解決する必要はありません。10610 ^ 6を開くだけです。1 06の配列では、すべての配列がfalseに初期化され、add()は配列添え字の位置をキーとしてtrueに設定し、remove()はfalseに設定し、contains()はこの位置の値を直接返します。

時間計算量:追加、削除、および含まれるものはすべてO(1)O(1)O 1

ACコード

class MyHashSet {
    
    
private:
    vector<bool> hash_set;
public:
    /** Initialize your data structure here. */
    MyHashSet() {
    
    
        hash_set.resize(1000100, false);
    }
    
    void add(int key) {
    
    
        hash_set[key] = true;
    }
    
    void remove(int key) {
    
    
        hash_set[key] = false;
    }
    
    /** Returns true if this set contains the specified element */
    bool contains(int key) {
    
    
        return hash_set[key];
    }
};

/**
 * Your MyHashSet object will be instantiated and called as such:
 * MyHashSet* obj = new MyHashSet();
 * obj->add(key);
 * obj->remove(key);
 * bool param_3 = obj->contains(key);
 */

おすすめ

転載: blog.csdn.net/Krone_/article/details/114753999