使用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出來直到找到最後一個資料,但這些被pop出來的資料從Stack角度來看應該還要存在於Stack中,所以我們需要另一個queue將原先pop出來的元素存放起來。一旦原先的queue清空後,這時候可能使用者又會再進行pus...
刷題必會知識 | 佇列 (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 中移除,並且更新front,從Queue中移除資料的行為又稱 dequeue getFront: 回傳 front 所指向的資料 getBack: 回傳 back 所指向的資料 IsEmpty: 檢查 Queue...
攀登富士山 | 行前準備與規劃紀錄 | 山屋預約
富士山之旅由於搶到御來光館的日期是在 7/16,因此這次攀登富士山的日期就選擇在今年(2024) 的 7/16 -7/17。 攀爬富士山大多都是呼籲預約山小屋,不要夜間單攻(彈丸登山) ,因此這次也是先以山屋預約日期為主,再去安排對應的爬山行程。另外富士山是一座活火山,隨時要注意火山活動相關的警報,這部分可以去富士山的官網查閱。 攀登路線吉田路線從富士山五合目出發,海拔為2300公尺,登山路線:5.8 公里。約耗時 5-7 個小時,也是山屋最多的路線,從7合目到9合目都有山屋,因此算是熱門的新手路線。也是我們這次的攀爬路線。 圖源:https://www.fujisan-climb.jp/trails/yoshida/index.html 除了吉田路線之外富士山還有其他攀登路線 須走路線吉田路線跟須走路線在本八合目後就會交會,因此人潮會開始便更多。這個路線最大的樂趣就是可以在下山途中體驗砂走,也就是在沙中滑行,實際上吉田路線的下山道也必須先從須走路線開始走,大概走道八合目才會又岔開 圖源: https://www.fujisan-clim...
有效回文 | Easy | LeetCode#125. Valid Palindrome
題目敘述 題目難度: Easy 題目敘述: 題目給定字串 s,當你把字串中的大寫字母轉換成小寫字母,並且把所有非字母或數字類的符號去除,如果從頭讀到尾跟從尾讀到頭都是一樣的字串,那就是一個有效的 回文(Palindrome) ,若回文有效就返回 true,反之則 false,s 僅包含ASCII當中可印出的符號。 解法一開始的想法 先將題目字串 s 中的大寫字母轉為小寫,並且將其餘符號去除 這部分可以宣告一個新的空字串,並且分別處理數字、大寫字母以及小寫字母 接著就是判斷回文,可透過迴圈同時檢查字串的頭跟尾是否一樣,若有發現不一致則回傳false,反之則True 頭尾pointer僅需scan到字串的中間即可 我的解法12345678910111213141516171819202122232425262728293031323334353637class Solution {public: bool isPalindrome(string s) { bool isPalindrome = false; string ...
計算逆波蘭表示法 | 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 迭代完畢後回傳 stacK 頂端元素 我的解法1234567891011121314151617181920class Solution {public: int evalRPN(vector&l...
簡化路徑 | Medium | LeetCode#71. Simplify Path
題目敘述 題目難度: Easy 題目敘述: 題目會給定一個 Unix 系統的檔案路徑字串,這題需要簡化路徑,並輸出簡化後的路徑字串。簡化路徑有下面幾項規則: 字串始終由 / 開始 路徑中的目錄僅可由一個 / 分隔開 除了 Root Dir 之外,不可由 / 作為字串結尾 輸出需要排除 . 或者 .. 在 Unix 系統中 . 代表當前目錄,可忽略,.. 代表跳到上一層目錄,舉例來說 /home/kevin/../LeetCode = /home/LeetCode 解法一開始的想法 獲取 / 與 / 中間的字串(即目錄),如果滿足規則就 push 進 stack 中 如果 /與 / 中間會是 . 則跳過,如果是 .. 則將stack中元素 pop 出來 其餘的通通 push 到 stack 當中 之後就是依序將 stack 元素 pop 出來並串接在回傳字串當中 我的解法12345678910111213141516171819202122232425262728293031323334353637383940class Solution {pub...
Min 堆疊 | Medium | LeetCode#155 Min Stack
題目敘述 題目難度: Medium 題目敘述: 題目要求設計一個 Stack, 可以支援 push, pop, top 以及在常數時間內獲取最小值 解法一開始的想法我的解法1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374class MinStack {public: int val, size = 0; MinStack *next; MinStack *Top = NULL; MinStack() : val(0), next(0) {} MinStack(int x) : val(x), next(0) {} MinStack(int x, MinStack *nextNode) : val(x), next(nextNode) {} ...
括號的最大嵌套深度 | Easy |LeetCode#1614. Maximum Nesting Depth of the Parentheses
題目敘述 Constraints: 1 <= s.length <= 100 s consists of digits 0-9 and characters ‘+’, ‘-‘, ‘*’, ‘/‘, ‘(‘, and ‘)’. It is guaranteed that parentheses expression s is a VPS. 題目難度: Easy 題目敘述: 給定一個有效的括號字串 s,回傳括號nesting的深度 這裡有效的意思就代表不會有類似這種字串出現 )()()(())(,一定會是閉合成對的括號 解法一開始的想法 這題很簡單,從想解法(畫在平板上)到最後Submission Accept花了11分鐘。 首先要想的問題會是: 如何判斷nesting parentheses? 我認為只要有連續的左邊未閉合括號出現,就能夠判斷出nesting深度。因此要做的事情就是當出現左括號 ( 就 push 進 stack,當出現右括號就 pop出stack,這些操作進行的同時記錄下stack的數量變化,最大值即為深...
近一年半的 AWS Cloud Support Engineer 心得記錄
背景 目前在台灣亞馬遜網路服務公司 (Amazon Web Services) 擔任 雲端支援工程師 (Cloud Support Engineer) ,但兩天後就要離職了,因此想說趁離職前紀錄並回顧一下這一年半以來的工作以及生活。 我是在我碩二上的時候(2021年10月)投遞AWS Cloud Support 校園招聘的職缺,當時原本在找研發替代役,後來因為知道AWS有開缺,抱持著試試看的心情投遞了履歷。大概隔天就收到了Online Assessment 的通知。OA其實就是簡單的電腦基礎知識,應該只是拿來篩本科非本科的(?),接著就是Phone Interview,當時的校招可以排志願序,我原本想去的是 Security 或者 Deployment Profile,但我在面試過程中,發現問題大多會跟 Troubleshooting 相關,因此Security Fail了,然後Deployment 進到最後的loop 的最後一關技術關也被問爆,後來轉面 DMS(Developer and Mobile Services) ,雖然是自己完全不太熟悉的領域,但好險最後通過面試了。...
有效的括號 | Easy |LeetCode#20. Valid Parentheses
題目敘述 題目難度: Easy 題目敘述: 給定一個字串 s,其中僅會包含 (、)、[、]、{、} 這些括號,需要在函式內判斷字串內的括號組合是否是合法得的,那怎樣算合法? 左括號一定要由相同類型的右括號閉合 括號閉合順序要正確 每個右括號也需要有相同類型的左括號閉合 舉例來說: Valid: 123s= "()[]{}"s= "([])"s= "[]" Invalid: 12s = "([)]"s = "(]" 解法一開始的想法 我的想法就是在迭代字串中字元的時候,將所有左括號 push 進一個stack,如果下一個字元是相應的右括號,就將括號從 stack 中pop出來,只要最後檢查stack是否還有左括號在,就能判斷是否valid。當然還是有一些edge case需要處理 我的解法1234567891011121314151617181920212223242526272829303132333435363738394...














