ハッシュテーブル [leetcode]

メモ: コードに関するランダムな考え

仮説

コンセプト

ハッシュテーブル(ハッシュテーブル、ハッシュテーブル):キーコードの値に応じて直接アクセスされるデータ構造で、平たく言えば配列がハッシュテーブルです。列挙する場合、時間計算量は O(n) ですが、ハッシュ テーブルを使用する場合、計算量は O(1) だけで済みます。

ハッシュ関数: 変数をテーブルのインデックスに直接マッピングします。

ハッシュ衝突: 異なる変数が同じインデックス位置にマップされます。解決策:ジッパー法、線形検出法。

ハッシュ構造の分類:配列、セット コレクション、マップ マッピング(ハッシュの問題が発生した場合はいつでも切り替えることができます)

ハッピーナンバー: 正の整数の場合、毎回その数値を各位置の数値の二乗和に置き換え、数値が 1 になるまでこのプロセスを繰り返します。そうしないと、無限ループになる可能性がありますが、決してゼロにはなりません。 1に変更します。それが1になれば、この数字は幸せな数字です。

効果

要素がコレクションに含まれているかどうかをすばやく判断できますが、追加の配列、セット、またはマップを保存する必要があるため、時間のためのスペースも犠牲になります。

使用

1. set に関して、C++ は 3 つの使用可能なデータ構造を提供します: std::set (赤黒レイヤー)、std::multiset (赤黒レイヤー)、std::unowned_set (ハッシュ層)、およびマップ。

2. 配列はシンプルで効果的です。ただし、スペースは限られており、(データ構造のスタックではなく) スタックスペースによって制限されます。配列値のサイズは制限されており、タイトルによって値のサイズが制限されているため使用できます。ハッシュ値が分散している場合、配列を使用するとスペースの無駄になります。

3. セットのスペース消費量は配列の消費量よりも大きく、セットは値をキーにマッピングしてハッシュ演算を実行し、最下層を維持します。

リートコード

1. 効果的なアナグラム 

2. 2 つの配列の交差

ハッシュ テーブルを使用して、すべての要素を配列に格納します。

3. ハッピーナンバー

4. 2 つの数値の合計

5. 4 つの数字を加算します

6. 身代金の手紙

クラシックなシーンを配列します。

7. 3 つの数字の合計

ダブルポインタ方式

8. 4つの数字の合計

ダブルポインタ方式

おすすめ

転載: blog.csdn.net/qq_41804812/article/details/129802023