1. 程式人生 > >leetcode python 1復習

leetcode python 1復習

{} ons rate 易懂 range 保存 back wid 得到

leetcode1

給定一個整數數組和一個目標值,找出數組中和為目標值的兩個數。

你可以假設每個輸入只對應一種答案,且同樣的元素不能被重復利用。

示例:

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

這道題目 一開始的想法是設置兩個不重復的指針,當兩個數字的和為目標值時,返回這兩個指針。
如下:
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
n=len(nums)
for i in range(n):
for j in range(i+1,n):
if nums[i]+nums[j]==target:
return i,j
但是這種明顯的可讀性很高,容易懂,缺點就是時間代價太多了(n2)
同樣的想要時間代價越小,花費的空間代價就更大。
在觀看其他人的代碼後獲得以下思路:
用target-nums 裏面的每個值,保存,O(n)空間代價,看得到的值是否存在於原來的nuns裏,如果存在,那麽輸出這兩個值的index
代碼如下:
class Solution(object):

def twoSum(self, nums, target):

"""

:type nums: List[int]

:type target: int

:rtype: List[int]

"""

d = {}

for i, num in enumerate(nums):

if target - num in d:

return [d[target - num], i]

d[num] = i
# for i ,num in enumerate(nums),調用了enumerate方法,獲得一個enumerate對象,可以用兩個參數獲取其中的index 和裏面的對象。


leetcode python 1復習