python leetcode刷題知識點筆記2

2021-10-03 06:00:14 字數 1785 閱讀 4738

第一種方法:bfs廣度優先搜尋,使用雙端佇列deque(因為效能比另外兩種queue好得多),在大迴圈內對二叉樹的每個層做一次遍歷,range(len(queue))使只遍歷當前的層,每次大迴圈ans加1。由於每個節點僅訪問一次,所以時間複雜度o(n)

import collections

class

solution

:def

maxdepth

(self, root: treenode)

->

int:

ifnot root:

return

0 queue = collections.deque(

) ans =

0while queue:

ans +=

1for _ in

range

(len

(queue)):

node = queue.popleft(

)if node.left:

if node.right:

return ans

第二種方法:dfs深度優先搜尋,利用遞迴的棧,借助level標記當前層,由於每個節點僅訪問一次,所以時間複雜度o(n)

class

solution

:def

maxdepth

(self, root: treenode)

->

int:

ifnot root:

return

0 self.ans =

0 self._dfs(root,0)

return self.ans

def_dfs

(self, node, level):if

not node:

return

if self.ans < level +1:

self.ans = level +

1 self._dfs(node.left, level +1)

self._dfs(node.right, level +

1)

第三種方法:dfs+分治,雖然**簡潔但耗時比上面兩種方法都久

class

solution

:def

maxdepth

(self, root: treenode)

->

int:

ifnot root:

return

0return1+

max(self.maxdepth(root.left)

, self.maxdepth(root.right)

)

以下例項展示了 fromkeys() 方法的使用方法:

iterable1 = 「12」 # 字串

iterable2 = [1,2] # 列表

iterable3 = (1,2) # 元祖

iterable4 = # 字典

v1 = dict.fromkeys(iterable1,『字串』)

v2 = dict.fromkeys(iterable2,『列表』)

v3 = dict.fromkeys(iterable3,『元祖』)

v4 = dict.fromkeys(iterable4,『字典』)

v5 = dict.fromkeys(iterable4) #value預設為none

以上例項輸出結果為:

python leetcode 最大回文數

直接暴力求解時間超出,選取manacher演算法 class solution def longestpalindrome self,s t join s 前後插入 是為了防止越界,不需要進行邊界判斷 n len t p 0 n 每一處的回文半徑 c r 0 r為當前訪問到的最右邊的值,c為此時對稱...

python LeetCode 奇偶鍊錶

給定乙個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 o 1 時間複雜度應為 o nodes nodes 為節點總數。示例 1 輸入 1 2 3 4 5 null ...

python LeetCode 兩數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...