好久沒刷leetcode了,這幾個月打算重新補一下演算法,那就從第一題重新刷了,順便寫一組解題報告
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。
示例:給定 nums =[2
,7,11
,15], target =
9因為 nums[0]
+ nums[1]
=2+7
=9所以返回 [0,
1]
我a了這題四次,每一次都是一次效能優化
一開始拿到題目,自然而然就想到直接o(n^2),就是直接遍歷列表,取乙個值,然後再遍歷一次列表,找到兩個相加等於目標數的值,返回下標即可。
#戰勝 27.32 % 的 python 提交記錄
#執行用時3992 ms
class
solution
(object):
deftwosum
(self, nums, target)
:"""
:type nums: list[int]
:type target: int
:rtype: 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]
這種速度顯然我們是不會滿意的,那麼我又思考了一下,就是遍歷列表一次,然後用目標值和nums[i]做差,然後得出差的值,並使用python的in關鍵字檢視差的值是否在列表中(前提是差值的下標和i不相等),如果有這個情況存在,那麼我們使用nums.index(tgt)返回我們要找的和tgt相等的值的下標。然後返回。#戰勝 54.29 % 的 python 提交記錄
#執行時間916 ms
class
solution
(object):
deftwosum
(self, nums, target)
:"""
:type nums: list[int]
:type target: int
:rtype: list[int]
"""for i in
range
(len
(nums)):
tgt = target - nums[i]
if tgt in nums:
if nums.index(tgt)
!= i:
if nums.index(tgt)
> i:
return
[i,nums.index(tgt)
]else
:return
[nums.index(tgt)
,i]else
:continue
可以看到速度優化了不少,但是還是不夠,我沒想到更好的辦法,於是看了下排名較高的大佬的題解
他們的**是這樣的
#戰勝 98.36 % 的 python 提交記錄
#執行時間28 ms
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]
if nums[x]
in d:
return d[nums[x]],x
else
: d[a]
= x
**非常簡單,建立了乙個字典d,遍歷一次列表,每過一項,如果不滿足對應項的值在字典的鍵中找到,那麼就把對應項的值和目標值的差作為鍵,下標作為值塞到字典裡,直到找到對應的項在字典的鍵中找到,那麼返回[d[nums[x]],x]。可以看到演算法已經優化到極致了。 LeetCode 1 兩數之和
給定乙個整數數列,找出其中和為特定值的那兩個數。你可以假設每個輸入都只會有一種答案,同樣的元素不能被重用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 step 1 class solution object def tw...
leetcode 1 兩數之和
1.兩數之和 這道題和程式設計之法上面的題目有以下幾個不同 1 題目所給定的陣列是無序的,程式設計之法裡面是預設有序的 2 要求輸出原陣列的序號,如果用乙個結構體維護陣列下標,那麼需要o n 的空間,顯然不是最好的方法 3 題目中包含負數,之前想用數值直接表示陣列下標,陣列值為原來的真正陣列下標,但...
leetcode 1 兩數之和
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 class solution for int i 0 ...