2. Two Sum

873 ワード

質問する


与えられた整数配列numsと整数targetについて、加算によってtargetを作成できる配列の2つのインデックスを返します.
正確には、同じ要素を2回使わなくてもいい答えがあります.
Example 1:
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Output: Because nums[0] + nums[1] == 9, we return [0, 1].
Example 2:
Input: nums = [3,2,4], target = 6
Output: [1,2]
Example 3:
Input: nums = [3,3], target = 6
Output: [0,1]

に答える


もちろん考えられる解決策は暴力です.しかし、このようにしてタイムアウトが発生します.
問題には明らかに答えがあるので、現在の数字の残りの候補として使用できる辞書を使用して値を検索できます.
以下にPythonとして実装する.

class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: nums_dict = {} for idx, num in enumerate(nums): #現在の数値numの残りの計算 complement = target - num #残りがdictionaryの場合。 if complement in nums_dict: return [idx, nums_dict[complement]] #現在の数値をキーとしてindexをvalueに設定します(現在の値は将来の残りの値になります)。 nums_dict[num] = idx