leetcode python 1復習
阿新 • • 發佈:2018-06-01
{} 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復習