スポンサーリンク

【LeetCode】1.Two Sum 解答・解説【Python】

スポンサーリンク
スポンサーリンク
この記事は約3分で読めます。

LeetCodeの問題を解きます。問題文は翻訳サイトと私の拙い英語力で和訳しており、正確でない可能性が高いためご注意ください。

問題文

原文

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

和訳

整数の配列numsと整数targetが与えられる。合計がtargetとなるような2つの数字のインデックスを返せ。

各入力は1つの解をもつと仮定して良よく、同じ要素を2回使ってはならない。

解答は任意の順番で返して良い。

方針

・全探索で解いてみます。

 

解答

解答1:Python, brute force

コメント+コード

 

コードのみ

 

・時間計算量:O(n^2)

配列numsについて、全ての組み合わせを試す2重ループを行っている

 

・空間計算量:O(1)

計算結果を配列に記録するようなことがないため。

 

解答2:Python, ハッシュテーブル

 

ハッシュテーブル、Pythonでは辞書型変数を使うことで、時間計算量を削減できる。

探索した要素と対になる値が辞書にあるかを判定し、あればそのインデックスと現在探索中のインデックスを返す。

無ければ、現在探索中の値をキー、そのインデックスを値として辞書に登録する。

 

 

・時間計算量:O(n)

探索済みの要素と対になる値を記録しておくことで、配列numsの走査が1回で済む。

 

・空間計算量:O(n)

探索済みの要素を記録している

 

補足・参考・感想

今回、あり得る組み合わせの全てを1つ1つ見た上で条件と合致するかを調べる解法にしています。このような解法は英語ではbrute forceと表現するようです。

indicesは日本語で言うインデックスのようです。

今回、初めてLeetCodeの問題を解いてみました。、Pythonで解答する際のエディタにクラスと関数の定義がデフォルトでセットされており、引数と返り値の型を指定するようになっているなど、Atcoderとはまた異なっています。

解答や解説、エディタにはデフォルトでC++が設定されているので、やはりC++の勉強は必須なのかもしれません。

英語で問題を読むという部分が既にハードルが高いですが、これから少しずつ挑戦していきたいと思います。

次の問題:9. Palindrome Number

記事一覧:LeetCode記事一覧

 

コメント