一. 題目
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。
你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
二.思路
1)自己思路
1> 雙指標遍歷陣列
class solution(object):
def twosum(self, nums, target):
""":type nums: list[int]
:type target: int
:rtype: list[int]
"""if nums == :
return none
else:
i = 0
while i < len(nums) - 1:
j = i + 1
while j < len(nums):
if nums[i] + nums[j] == target:
return i,j
else:
j += 1
i += 1
這個方法,如果加上前面的空集判定,會超時。
2)參考思路
1> hash table:思路是用dict構建hash table:以給定陣列的值為hash table 的key,給定陣列的index為給定陣列的value。
好處是不需要迴圈就能直接返回指定value的index,也就是比較快的查詢。
class solution(object):
def twosum(self, nums, target):
""":type nums: list[int]
:type target: int
:rtype: list[int]
"""
hash_dict = {}
for i, v in enumerate(nums):
hash_dict[v] = i
for i2, v2 in enumerate(nums):
if target-v2 in hash_dict and hash_dict[target-v2] != i2:
return [i2, hash_dict[target-i2]]
key和value的指定需要具體問題具體分析。emm,是不是一般要return什麼就把什麼當作字典的value呢?
2> hash table的法2
不需要提前構建好hash table,而是邊迴圈邊構建邊判斷
大概思路是從首位開始將陣列中的每個項需要尋找的值(也就是 target -v)為k,和這個項的index為v放入hash字典裡。 如果陣列後續的值有與這個需要尋找的值相等的情況,那麼這個陣列的值的index和需要尋找的值的index上的數加起來就是target。
emm...通俗來講就是,陣列的每一項提出了需求說:我就要找這個數。然後列了個表,如果後續有相等,就是找到了。
也就是 [將需求放入字典裡,如果後續的值滿足這個需求,那麼就接著操作]
class solution(object):
def twosum(self, nums, target):
""":type nums: list[int]
:type target: int
:rtype: list[int]
"""
hash_dict = {}
for i, v in enumerate(nums):
if v in hash_dict:
return [i, hash_dict[v]]
else:
hash_dict[target - v] = i
優點:只遍歷一遍陣列 Python例項 1 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以...
1 兩數之和
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 解class solution hash nums i...
1 兩數之和
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 由於元素不能重複利用,所以使用j i 1,通過雙迴圈,...