Python LeetCode-1. 2つの数の和(難易度-簡単)(python)

1283 ワード

1.タイトルの説明:
整数配列numsとターゲット値targetを指定します.この配列でターゲット値の2つの整数を見つけて、その配列の下付きを返します.
入力ごとに1つの答えしか対応しないと仮定できます.しかし、この配列の同じ要素を繰り返し利用することはできません.
例1:与えられたnums=[2,7,11,15],target=9
nums[0]+nums[1]=2+7=9なので[0,1]を返します
2.分析
まず思いついたのは暴力解法で、このリストを2回巡り、欲しい解を見つけてから、重くします.時間複雑度O(n 2)は,結果として時間タイムアウトである.次に、辞書というpythonが持っているhashテーブルを利用して、空間を利用して時間を変えることを考えます.(target-nums[i])をキーとし、インデックスiを値とする辞書を構築し、リスト全体を巡回します.2つの終了条件:1. num[x]私たちが構築した辞書では、あるインデックスに対応する値にnum[x]を加えるとtargetに等しいことを意味します.辞書はhash表なので,この時間複雑度はO(1)である.構造辞書を繰り返したため、時間の複雑さはO(n)である.遍歴ルックアップ値の時間複雑度はO(n)である.合計アルゴリズム時間複雑度O(n),空間複雑度O(n),戦果:実行時間:28 ms,Two SumのPythonコミットで98.36%のユーザメモリ消費:12.7 MB,Two SumのPythonコミットで0.96%のユーザを破った
3.解決
class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        n = len(nums)
        
        d = {}
        for x in range(n):
            a = target - nums[x]
            d[a] = x #       ,          ,          
        for x in range(n): #         ,          
            if nums[x] in d and d[nums[x]] != x: #         
                return d[nums[x]],x