題名:今日のお題は、「PythonでTwo Sum問題を解いてください」
報告者:ダレナン
(No.2645の続き)
Two Sum問題は、与えられた配列の中で、2つの数の和が指定された目標値に等しいペアを見つける問題です。以下にPythonでの実装例を示します。
python
def two_sum(nums, target):
# 数値とそのインデックスを格納する辞書
num_dict = {}
for i, num in enumerate(nums):
complement = target – num
if complement in num_dict:
# 目標値になるペアを見つけた場合、そのインデックスを返す
return [num_dict[complement], i]
# 現在の数値とそのインデックスを辞書に追加
num_dict[num] = i
# ペアが見つからなかった場合はNoneを返す(この実装ではあり得ないが、エラー防止のため)
return None
# 使用例
nums = [2, 7, 11, 15]
target = 9
result = two_sum(nums, target)
print(result) # 出力: [0, 1]
このコードの説明:
num_dictという辞書を使って、各数値とそのインデックスを保存します。
リストの各要素に対して、目標値からその数値を引いた補数を計算します。
もしその補数がすでにnum_dictに存在する場合、補数のインデックスと現在のインデックスを返します。
見つからなければ、現在の数値とそのインデックスを辞書に追加して、次のループに進みます。
このアルゴリズムの時間計算量はO(n)で、スペース計算量もO(n)です。