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テーブルを利用して、空間を利用して時間を変えることを考えます.
3.解決
整数配列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