二元樹的最大深度 | Easy | LeetCode#104. Maximum Depth of Binary Tree
題目敘述
題目難度: Easy
題目敘述: 題目給定一個Binary Tree 的 Root,要求這棵二元樹的最大深度
最大深度即 root 到樹葉的最遠距離
解法一開始的想法一開始的想法只有停留在 Traversal 本身,所以寫了 Inorder, Preorder, Postorder 甚至是 Level-order,都還是沒有太多想法…
這次是看了提示後才寫出來,並且了解到我自己對Recursive 的不熟練
我的解法123456789101112131415161718192021/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val ...
從並行計算到聯邦式學習 | 學習筆記
甚麼是並行計算?現在的深度神經網路模型具有大量的參數,模型大也意味著計算量變大
Big Model + Big Data -> Huge computation cost !
單一GPU進行一年的計算量,可以透過20 個 GPU 一次進行計算來實現,來減少花費的時間成本
Linear Predictor未完待續
聯邦式學習最好先具備並行計算和分散式機器學習的基礎。可以參考下面這系列影片:https://www.youtube.com/watch?v=gVcnOe6_c6Q&t=124s
背景
問題背景: Google 想要透過使用者行動裝置上的資料來訓練模型。
可能的解決辦法: 蒐集使用者資料,上傳到某個集中式學習平台去訓練模型
面臨的挑戰: 使用者拒絕上傳資料,尤其是機敏資料到 Google 的伺服器
這樣的問題情境也發生在個人隱私保護很嚴格的歐美企 ...
刷題必會知識 | 樹 (Tree) | 進階實作篇 | LeetCode 筆記
In-Order Traversal by Parent Field在前一篇介紹 Tree 的文章 中應該有發現,我們在實作 Binary Tree Node 的時候有宣告一個 TreeNode *parent 指標,但卻沒有使用。
我們在實踐 Inorder Traversal 也可以透過 Parent Field來去進行,若要善用 *parent 進行 Traversal 需要提及兩個重要函式:
InorderSuccessor() : 以 inorder 順序尋找 (LVR) 進行 Traversal 的 下一個 node
InorderPredecessor(): 以 inorder 順序尋找 (LVR) 進行 Traversal 的 前一個 node
這裡提到的概念會與之後的 BST(Binary Search Tree) 有關聯
在實作這兩個函式來實踐 Inorder ...
刷題必會知識 | 樹 (Tree) | 基礎篇 | LeetCode 筆記
甚麼是 Tree?
Tree 是一種常見的資料結構,直觀上來看樹狀結構代表階層式結構,像是族譜或是不同語言,語系的直系表就很常用樹來表示。
基本介紹
節點(Node): 樹的基本單位
根(Root): 樹狀結構的初始節點
分支(Branch): 節點與節點之間的分支
子節點(child): Root以外的節點
葉子節點(leaf): 沒有連接到其他子節點的節點,即樹狀結構的末端節點
樹的定義Tree的定義: 由一個或是數個節點組成的有限集合 並且
存在一個特定節點為Root
其餘節點可以分割成 $n >= 0$ 個沒有交集的(disjoint)集合 $T_{1},T_{2},…,T_{n}$ 為此Root的子樹(subtree)
這是一個遞迴的定義,對於上面圖中的節點A(Root),有兩個子樹,其樹根分別是節點B和節點C,樹中的每一個節點都是某個子樹的root ...
使用Stack來實現Queue | Easy | LeetCode#232. Implement Queue using Stacks
題目敘述
題目難度: Easy
題目敘述: 這題要求透過兩個 Stack 來實現一個Queue具有的基本操作,像是 push, peek, pop 以及 empty
題目也有提醒只可以使用標準 Stack 操作來實現 You must use only standard operations of a stack, which means only push to top, peek/pop from top, size, and is empty operations are valid.
解法一開始的想法這題跟 225. Implement Stack using Queues 其實是很類似的:
Push 操作可以直接使用 <stack> 中的 push() STL 進行操作,重點會是實現 pop() 跟 peak(),由於Queue會是 FIFO,因此先進 ...
使用Queue來實現Stack | Easy | LeetCode#225. Implement Stack using Queues
題目敘述
題目難度: Easy
題目敘述: 本題要求僅能使用兩個Queue來實現具有LIFO特性的Stack功能,需要能夠支援正常的Stack操作像是(push, pop, top, empty功能),題目額外提醒,我們只能使用常規queue操作,像是push to back, peek/pop from the front, size, isEmpty。
解法一開始的想法由於 我覺得Stack 跟 Queue最大的不同就是 FIFO 以及 LIFO,因此只要有辦法調整pop出來的順序即可,因此push可以正常push,但pop需要能夠回傳queue的尾端元素,top的話就直接用<queue> 的 back() 即可。
題目有說可以用兩個Queue,因此一個正常push進去的queue,如果要對它進行 pop,我們就需要依序將queue內資料Pop出來直到找到最後一個資料 ...
刷題必會知識 | 佇列 (Queue) | LeetCode 筆記
甚麼是 Queue?Queue 也是一種資料結構,用於暫時儲存元素 ,它與 Stack 不同的是,它是屬於 FIFO (First-In-First-Out) 的特性,也就是先進入 Queue 的元素先出來,並且新元素會被加入到 Queue 的尾端。
通常 Queue 會被應用在需要具有順序一致性的系統中,像是網路封包處理、OS的 Process Schedule, BFS等等,反正就是想像是在排隊買票的感覺。
Queue 操作:
隊伍前方: front
隊伍後方: back
進入隊伍: push, 一定只能從 back 進入
離開隊伍: pop, 一定只能從 front 離開
Push(data): 將 data 從 back 放入Queue, 並更新成新的back,在Queue 中新增資料又稱 enqueue
Pop: 把 front 指向的資料從Queue 中移除,並且更新f ...
攀登富士山 | 行前準備與規劃紀錄 | 山屋預約
富士山之旅由於搶到御來光館的日期是在 7/16,因此這次攀登富士山的日期就選擇在今年(2024) 的 7/16 -7/17。 攀爬富士山大多都是呼籲預約山小屋,不要夜間單攻(彈丸登山) ,因此這次也是先以山屋預約日期為主,再去安排對應的爬山行程。另外富士山是一座活火山,隨時要注意火山活動相關的警報,這部分可以去富士山的官網查閱。
攀登路線吉田路線從富士山五合目出發,海拔為2300公尺,登山路線:5.8 公里。約耗時 5-7 個小時,也是山屋最多的路線,從7合目到9合目都有山屋,因此算是熱門的新手路線。也是我們這次的攀爬路線。
圖源:https://www.fujisan-climb.jp/trails/yoshida/index.html
除了吉田路線之外富士山還有其他攀登路線
須走路線吉田路線跟須走路線在本八合目後就會交會,因此人潮會開始便更多。這個 ...
有效回文 | Easy | LeetCode#125. Valid Palindrome
題目敘述
題目難度: Easy
題目敘述: 題目給定字串 s,當你把字串中的大寫字母轉換成小寫字母,並且把所有非字母或數字類的符號去除,如果從頭讀到尾跟從尾讀到頭都是一樣的字串,那就是一個有效的 回文(Palindrome) ,若回文有效就返回 true,反之則 false,s 僅包含ASCII當中可印出的符號。
解法一開始的想法
先將題目字串 s 中的大寫字母轉為小寫,並且將其餘符號去除
這部分可以宣告一個新的空字串,並且分別處理數字、大寫字母以及小寫字母
接著就是判斷回文,可透過迴圈同時檢查字串的頭跟尾是否一樣,若有發現不一致則回傳false,反之則True
頭尾pointer僅需scan到字串的中間即可
我的解法12345678910111213141516171819202122232425262728293031323334353637class Solution ...
計算逆波蘭表示法 | Medium | LeetCode#150. Evaluate Reverse Polish Notation
題目敘述
題目難度: Easy
題目描述: 本題要求給定一個字串陣列 tokens,當中是以 逆波蘭表示法 的算式運算式,需要回傳算術運算的結果,結果為整數型態。
注意:
有效的運算子只會有: +, -, *,/。
Operand 都會是整數
除法採無條件捨去法
不可除以0
中間運算的數字會是 32-bit 整數
解法一開始的想法如果看上面的範例 ["4","13","5","/","+"],可以看出,如果碰到operator,碰到operator前的兩個數字就會透過該operator進行運算。
因此我的想法是:
建立一個stack
迭代 tokens 若遇到數字就push進stack
若遇到運算子,則將兩個元素pop出來進行四則運算
運算結果丟回 stack
迭代完畢後回傳 st ...