Python版[leetcode]1.2つの数の和(難易度が簡単)

2491 ワード

整数配列numsとターゲット値targetを指定します.この配列でターゲット値の2つの整数を見つけて、その配列の下付きを返します.
入力ごとに1つの答えしか対応しないと仮定できます.しかし、この配列の同じ要素を繰り返し利用することはできません.
例:
与えられたnums=[2,7,11,15],target=9
nums[0]+nums[1]=2+7=9なので[0,1]を返します
最初はnumsを直接2つのforループで巡り、現在数と現在数の後のすべての数で合計し、targetと同じであれば現在のインデックス配列を直接返すことを考えていました.
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            for j in range(i+1,len(nums)):
                if nums[i]+ nums[j] == target:
                    return [i,j]
    

しかし、このアルゴリズムの時間的複雑さはO(n 2)であり、時間がかかるため、辞書を使用する方法を参考にしました.
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        hashmap = {}
        for index, num in enumerate(nums):
            another_num = target - num
            if another_num in hashmap:
                return [hashmap[another_num], index]
            hashmap[num] = index
        return None

この方法は,1つの辞書を通して,遍歴するときに目標数字から現在の数字の値とインデックスを減算して挿入し,遍歴を判断するたびに現在の値が辞書にあるかどうかを判断し,いれば結果を返し,非常に効率的である.