はじめに
本日からジーツファクトリーメンバーのききがよりステップアップするための日記としてアルゴリズム問題を解いた感想やアプローチ方法など記していきます。
毎日1つの問題を解いて行きたいと思います!目指せ100日!
問題の内容
nums
という数字が入っているリストと
target
という変数があります。
nums
の中の数字を足し合わせて
tarrget
になるインデックスを
output
に格納して表示させる問題です。
アプローチ方法
-
- ブルートフォース
ブルートフォースですべての組み合わせを調べる方法。この場合、nested loopを使用するためO(n^2)になる。
-
- Hash map
ブルートフォースの欠点を改善するためにHash mapを使用します。この場合は
O(n)です。
以下のポイントで解いていきます。
num_dict
という辞書を作成
enumerate
を用いてnums
を繰り返す。
complement
という変数にtarget-num
を格納
- もし
num_dict
にcomplement
と同じ数字があったら、現在のインデックスとnum_dict
のバリューがcomplement
をリストに格納して返す
num_dict
に現在のインデックスとnum
を格納
まとめ
ベアを見つける問題はブルートフォースよりhashを使用したほうが効率的に解けることを学びました。
HashMap(辞書)は、キーと値のペアを高速に格納・検索できるため、特に以下のようなシナリオで非常に効果的です。
- 文字列中の各文字の出現回数を数える
- リスト内で重複する要素があるかを確認する。
- 2つのリストから共通する要素を探す場合。