A:257. 二叉樹的所有路徑#
給你一個二叉樹的根節點 root ,按 任意順序 ,返回所有從根節點到葉子節點的路徑。
葉子節點 是指沒有子節點的節點。
輸入:root = [1,2,3,null,5]
輸出:["1->2->5","1->3"]
可能題目比較簡單,也可能寫了兩天演算法題了稍微有了一點狀態,這次比較快速,一遍就過了。以下是提交的程式碼:
/**
* Definition for a binary tree node.
* class TreeNode {
* val: number
* left: TreeNode | null
* right: TreeNode | null
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
* }
*/
function binaryTreePaths(root: TreeNode | null): string[] {
const result: string[] = []
const dfs = (node: TreeNode | null, path: string) => {
if (!node || node.val === null) {
return
}
const currentPath = `${path}${path ? '->' : ''}${node.val}`
if (!node.left && !node.right) {
result.push(currentPath)
}
dfs(node.left, currentPath)
dfs(node.right, currentPath)
}
dfs(root, '')
return result
};
這段提交的結果是:
Your runtime beats 93.55 % of typescript submissions
Your memory usage beats 53.22 % of typescript submissions (44.2 MB)
深度優先搜索的基本思想是首先訪問一個節點,然後再嘗試訪問與之相連的節點,並以此類推,直到沒有未訪問的節點為止。遞迴是實現 DFS 的一個非常常用的方法。
標準 DFS 演算法的核心思想為:
- 遞迴地探索每個節點。
- 對於已訪問的節點,進行標記,以避免重複訪問。
- 遍歷所有相鄰節點。
上面二叉樹問題的特殊性在於只需考慮二叉樹的左右子節點,並且沒有必要標記節點,因為樹結構保證了沒有循環路徑。
R:Productivity#
這篇文章的作者是 OpenAI 的總裁 Sam Altman,因為總被問到生產力的問題,所以專門寫了一篇文章來說明自己對生產力的看法。以下是他的一些觀點和經驗:
複利不只是金融概念,也是職業概念,職業的複利也像魔法一般。
關於做什麼#
在無價值的方向上走得多快都沒有意義,對於生產力而言最重要的是做正確的事情,這一點常常被忽略。獨立思考很難但多加練習就可以做得更好。
遇到的令人印象深刻的人都有強烈的信念感,這種信念感在大多數人身上時沒有的。這也意味著勇氣,這種信念要讓你敢於反對,敢於和大多數人不一樣。即使有時候犯錯了也不要磨滅信念感,因為犯錯是正常的。
確保在日程中留足空餘的時間來想想要做什麼。Sam 的方式是讀書、和有趣的人閒聊還有呆在野外。
做不喜歡的事情上效率會很低,Sam 會盡量把這些事情委託出去或者避開它們,比較好的委託方式是找到喜歡做這些事的人,他們能把這些事做得更好更高效。做不喜歡的事情會拖累自己的士氣和動力。
很重要的是你可以學會任何你想學的事情,你可以很快地進步。一開始你可能認為這除非是奇蹟,但最終只要你堅持就能夠發現你可以做到。
偉大的工作通常需要和同事一起協作完成,和聰明、高效、快樂、積極的人一起工作不會打擊你的雄心,而和相反的人一起工作則會有很大的代價。
關於優先級#
優先級系統有三大原則:1. 確保完成重要的事情;2. 不在蠢事上浪費時間;3. 列許多待辦清單。
列許多待辦清單有助於多任務同時開展,而不用把這些事情記在腦子中,而且不置身事內的時候,可以很快地找到感興趣的事情去做。
以一種產生動力的方式來確定優先級:做得越多就感覺越好,感覺越好就能做得越多,他喜歡以一種能讓事情取得進展的方式開啟和結束每一天。
盡量避免會議,有 90% 的會議是浪費時間的,剩下 10% 就可以彌補這些會議的內容。會議時間最好安排在 15-20 分鐘之間,或者是兩小時的長會。
一天的不同時間段從事不同的事情,早上的前幾個小時最高效,不會讓任何人安排任何事,會議都定在下午。如果注意力開始下降了,就休息一下換件事做。
大部分人都不夠重視自己的時間 - 一個小時能賺 $100 的人卻花幾個小時去做一件不喜歡的事情來省下 $20。
不要落入生產力陷阱,許多人在想怎麼優化自己的系統卻沒有好好想想是否在處理正確的問題。如果在做錯誤的事情,系統好不好都沒有意義。正確的目標是優化你的一年,而不是你的一天。
關於身體因素#
讓身體保持一個好的狀態,策略可能因人不同,對 Sam 來說做好以下的事情感覺可以至少有 1.5 倍的生產力提升(一些不太具有普適性的習慣我沒有做記錄):
- 睡眠是保持生產力最重要的因素,睡眠追蹤器可以幫助尋找最佳的睡眠策略。比較容易堅持的是設置之後就可以忘掉的策略,比如 Emfit QS+Active。
- 在涼爽、黑暗、安靜的環境裡睡覺,一個好的床墊能極大改善睡眠質量
- 睡前不要吃太多東西,不要喝酒
- 旅行的時候,使用眼罩和耳塞
- 鍛煉可能是保持身體狀態的另一重要因素。試過幾個月的不同運動項目後,似乎最好的項目是每週三次舉重一個小時,偶爾進行高強度間歇訓練。除了生產力的提高,這也是整體感覺最好的運動項目。
- 第三個重要因素是營養。食用大量的糖是要極力避免的事情,還有辛辣的刺激性食物。因為對甜食沒有抵抗力,所以盡量不要把它們買回來
其它#
確保自然光、安靜、不會被打擾的工作環境。
對於必須要頻繁要做的瑣事,寫定制化軟體來完成。學習怎麼打字更快以及快捷鍵操作來完成工作。
避免接觸會引起壞情緒的人和事。
對於計劃要做的事情,每次嘗試在相同時間超額完成一些,這可以在每件事上都感覺到高效,但過度的超額也是災難性的。
不要忽略了家人朋友還有自己喜歡的事情,否則你會不開心,也會影響生產力。
最後再重複一次:在錯誤的方向上講生產力沒有意義,更重要的是想清楚要做什麼。
T:Jupyter Kernel Gateway#
Jupyter 官方的專案,用於將 Jupyter kernel API 化,不依賴 Jupyter Notebook 或 Jupyterlab 直接啟動服務。
S:關於 “二八原則” 的一個思考#
行動之前先想清楚想要什麼,而不是想做什麼。有興趣點有挑戰的事情很多,如果每件都做時間是不夠用的,對於這些事情結果導向,把握住自己想要的那部分即可,這才符合 28 原則。如果有剩下的精力再去做自己該做的事。
參考資料: