1 兩數之和 python

2021-08-22 08:52:48 字數 2038 閱讀 7629

一. 題目

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。

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

示例:

給定 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,通過雙迴圈,...