在刷leetcode的時候碰到一道題,內容如下所示:
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。
示例:我的思路有兩種(python版本):給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
暴力破解,通過兩層迴圈
def
twosum
(self, nums, target)
:"""
:type nums: list[int]
:type target: int
:rtype: list[int]
num_size = len(nums)
"""res=
for ix_left in
range
(num_size )
:for ix_right in
range
(ix_left+
1,num_size)
:if target ==
(nums[ix_left]
+ nums[ix_right]):
[ix_left,ix_right])if
len(res)==1
: res=res[0]
return res
這種思路一般都能想到,但效率比較低,時間複雜度為o(n^2)
2.逆向思維,利用字典
def
twosum
(self, nums, target)
:"""
:type nums: list[int]
:type target: int
:rtype: list[int]
"""dic=
res=
for i,num in
enumerate
(nums)
: diff=target-num
if diff in dic:
[dic[diff]
,i])
dic[num]
=i if
len(res)==1
: res=res[0]
return res
題目說的是和為target,可以反過來思考:
對nums遍歷,看target和num的差是否在字典的key中,在的話返回key的value(即在num中的index)
這樣時間成本上就節約了很多
由於個人水平有限,可能還有考慮不足的地方,歡迎指正
雜湊表之開雜湊
了解雜湊基本看概念請看這裡 搜尋結構之雜湊 開雜湊完整 開雜湊 開雜湊每乙個位址的底層實現像乙個個的桶,所以又叫雜湊桶,同乙個桶中存放雜湊衝突的元素。通常,每個桶對應的鍊錶結點都很少,將n個關鍵碼通過某乙個雜湊函式,存放到雜湊表中的m個桶中,那麼每乙個桶中煉表的平均長度為n m,以搜尋平均長度為n ...
查詢 之 雜湊表查詢(雜湊表)
雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 這裡對應關係f稱為雜湊函式,又稱為雜湊 hash 函式。採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續儲存空間稱為雜湊表或雜湊表 hash table 雜湊技術既是一種儲存方法...
Python學習之 雜湊表與可雜湊物件
十一 python 雜湊表與可雜湊物件 11.1 雜湊表 雜湊表 雜湊是從 hash 音譯過來的,雜湊表 hashtable 也叫做雜湊表。雜湊表是鍵值對的無序集合,其每個鍵都是唯一的,核心演算法是通過索引去查詢值,python 中的字典符合雜湊表結構,字典中每個鍵對應乙個值,my dict 雜湊是...