演算法目錄
示例 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級父親標記 然後用這個點向外擴充套件更新...