Algorithm做算法題,Review點評英文文章,Tip總結技術技巧,Share做技術分享。每周打卡一次,這就是ARTS打卡。
1. 做算法題
Leetcode55. 二叉樹的深度
題目:輸入一棵二叉樹的根節(jié)點,求該樹的深度。從根節(jié)點到葉節(jié)點依次經(jīng)過的節(jié)點(含根、葉節(jié)點)形成樹的一條路徑,最長路徑的長度為樹的深度。
例如:
給定二叉樹 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
解題思路:這題用遞歸再適合不過了,而遞歸算法不大符合常用思維方式。舉個例子以便于理解遞歸算法,而且便于代碼編寫。
電影院里黑漆漆的,你不知道自己正坐在第幾排,可以打開燈數(shù)一下,但會影響別人看電影。還有個辦法,問前面一排的人是坐在第幾排,然后加1就是自己的排數(shù)。但前面那位老兄和你一樣也不知道自己第幾排,沒關系,繼續(xù)向前問下去,直到第一排一定知道自己是第一排。前排反饋給后一排,后一排人加1再反饋給后排,以此類推,到了你的座位,就知道了自己的排數(shù)是前面一排加1。這就是遞歸算法。
解題代碼:
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
?
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if root is None://如果節(jié)點本身為空,深度為0
return 0
if root.left is None and root.right is None:
return 1//如果左右節(jié)點都為空,深度為1,到了“第一排”
else:
return max(self.maxDepth(root.left), self.maxDepth(root.right))+1//取左右子樹的高度,讓后加1就是本層的高度
2. 點評英文文章
文章What every developer should know about TCP簡單介紹了TCP協(xié)議如何三次握手,如何控制流量擁塞。TCP協(xié)議不僅是計算機通信的規(guī)約,還能探測網(wǎng)絡的帶寬和延時情況,并調節(jié)發(fā)送速度。
3. 技術技巧
很多人會買一本Linux基礎書作為工具書,遇到問題就去查工具書。其實Linux本身就自帶了很強大的幫助文件,man command和 info command都是對命令的詳細解釋, command --help是命令自帶的簡易幫助。雖然這些幫助文件是英文的,看起來有一點費力,但英文解釋更容易理解和記憶命令。例如常用的刪除命令rm -rf,但如何理解命令中每一個字母的含義呢,rm是remove刪除的意思,-r是recursive遞歸的意思,-f是force強制的意思。
4. 技術分享
Linux中刪除文件時,可能出現(xiàn)權限不足的報錯,習慣性地就用sudo命令提權,再刪除文件。這容易誤解為用戶不具有該文件的寫權限,所以不能刪除。實際上刪除文件不是依靠用戶具有該文件的寫權限,而是用戶具有該文件所在目錄的寫權限。這都和Linux文件系統(tǒng)有關,文件的元信息存儲在所在目錄中。