Day8 兩數之和

2021-10-18 03:47:15 字數 2552 閱讀 9766

演算法目錄

示例 1:

輸入:nums = [2,7,11,15], target = 9

輸出:[0,1]

解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1]

示例 2:

輸入:nums = [3,2,4], target = 6

輸出:[1,2]

示例 3:

輸入:nums = [3,3], target = 6

輸出:[0,1]

考察知識點:陣列,雜湊表(字典)

請補充完整如下**:

class

solution

:def

twosum

(self, nums: list[

int]

, target:

int)

-> list[

int]

:

思路:結合題目及提示這裡使用字典。

用target減去列表中的某個值,並將該值作為key,其下標作為value存放到字典中,接著target依次減去剩下的列表項中的值並判斷結果是否存在於字典,如果存在即表示列表中有兩個值相加等於target,此時即可直接返回答案。並且字典儲存可以起到去重的作用。

class

solution()

:def

twosum

(self,nums,target)

:dict

=for i,n in

enumerate

(nums)

:if target-n in

dict

:return

[dict

[target-n]

,i]else

:dict

[n]= i

if __name__ ==

"__main__"

: so = solution(

) result = so.twosum([1

,8,9

,6,2

],10)

print

(result)

大家注意審題,確定輸入是什麼,輸出又是什麼,假定又是什麼。

輸入:待尋找的列表 nums, 兩數之和 target

輸出:有且僅有滿足要求的一對整數的下標

假定:一定存在,且僅有乙個答案

題目分析:兩個數之和等於 target, 首先標記所有遍歷過的數,如果 target 減去當前被遍歷到的

值 e 後,即 target-e 被標記過,則找到答案。

判斷值是否在某個容器中,做到 o(1) 時間複雜度的便是最常用的雜湊表,對應 python 中的字典。就本題而言,鍵為標記元素值,字典值為陣列下標,所以更加確定使用字典這個資料結構。

class

solution

:def

twosum

(self, nums, target)

: d =

for i,e in

enumerate

(nums)

:if target-e in d:

return

[d.get(target-e)

,i] d[e]

= i

index 複雜度為 o(n), 所以實際時間複雜度為 o(n^2),儘管表面上看只有乙個 for 迴圈。

def

twosum1

(nums,target)

:for index,num in

enumerate

(nums)

: another_num = target - num

nums[index]

=none

if another_num in nums:

return

[index,nums.index(another_num)

]return

none

下面**兩層 for,空間複雜度雖然為 o(1),但是時間複雜度為 o(n^2)。所以需要找到犧牲空間換取時間的方法。

class

solution

:def

twosum

(self, nums, target)

: n =

len(nums)

for i in

range

(n):

for j in

range

(i+1

,n):

if nums[j]

== target - nums[i]

:return i,j

break

else

:continue

以上使用雜湊表犧牲空間,但是換取時間,實際中能找到節省時間的解往往更有價值。

每日一句

i can because i think i can.(我行,因為我相信我行!)

實習日記 Day8

今天是聊了很多天的一天 今日份心得體會的主題是 在聊天中學習 工作以外的興趣愛好 今天我竟然和導師閒聊好了幾小時,當然內容主要是圍繞著工作展開的話題。也許是昨天送的小禮物奏效了,又也許是因為今天真的很閒,以至於組裡有同事壓根沒來上班,再或者是因為上了年紀的男性長輩都比較喜歡 好為人師 我都不得而知 ...

坦克大戰 day 8

在tank類定義陣列,載入每一張。使用static關鍵字宣告的 塊叫靜態 塊。靜態塊用於初始化類,為類的屬性初始化。每個靜態 塊只會執行一次。如果有些 必須在專案啟動的時候就執行,那麼我們就可以使用靜態 塊來實現,這種 是主動執行的。坦克的陣列 private static image tankim...

湖南集訓day8

難度 可以先考慮一維,可知 模k意義下相同的字首和任意兩個相減都是k的倍數 問題等價於統計字首何種模k相同的數的對數。多維的時候二維字首和,壓行或者壓列,n 3可以解決。樹形dp可做,好難好難的樣子 考慮貪心 暗點的深度排序,每次拿出未被更新的最深的點把他的k級父親標記 然後用這個點向外擴充套件更新...