括號的最大嵌套深度 | 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? 我認為只要有連續的左邊未閉合括號出現 ...
近一年半的 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了,然後Depl ...
有效的括號 | Easy |LeetCode#20. Valid Parentheses
題目敘述
題目難度: Easy
題目敘述: 給定一個字串 s,其中僅會包含 (、)、[、]、{、} 這些括號,需要在函式內判斷字串內的括號組合是否是合法得的,那怎樣算合法?
左括號一定要由相同類型的右括號閉合
括號閉合順序要正確
每個右括號也需要有相同類型的左括號閉合
舉例來說:
Valid:
123s= "()[]{}"s= "([])"s= "[]"
Invalid:
12s = "([)]"s = "(]"
解法一開始的想法
我的想法就是在迭代字串中字元的時候,將所有左括號 push 進一個stack,如果下一個字元是相應的右括號,就將括號從 stack 中pop出來,只要最後檢查stack是否還有左括號在,就能判斷是否valid ...
刷題必會知識 | 堆疊 (Stack) | LeetCode 筆記
甚麼是 Stack?Stack 是一種資料結構,具有 後進先出(Last-In-First-Out, LIFO) 的特性,
Stack 實作 (C++)這裡我想透過 C++ 去時做一個完整的 Stack 功能,並且實踐常見的 push, pop, isEmpty 等等操作
用 Array 實作 Stack再透過C++ 實作Stack得時候,需要注意某些變數不能被外部存取,像是
top: 用於指向stack 的頂端,也就是最上面的index
capacity: stack的記憶體大小
*stack: 指向stack的指標
因此與上面相關的變數需要作為 Private 的成員變數。另外再使用陣列實踐Stack的時候有時候會出現,記憶體不夠的狀況,因此可以透過建立一個自動擴展capacity的函數來解決。
另外,在實作Pop的時候,並不需要將資料實際移除,而是將 top 扣掉1,好像是我 ...
兩鏈相加 | Medium |LeetCode#2. Add Two Numbers
題目敘述
題目難度: Medium
題目敘述:這題要求給定兩個非空的linked list來代表兩個非整數數字,兩個數字以反向排序,每一個digit被存在個別的node上,題目要求將兩個數字相加後同樣以反向存成一個linked list並回傳
舉例:可以看範例1,342 和 465 分別以反向排序儲存,並且相加後的值為 807,最後再反向初存成list,輸出 [7,0,8]
解法一開始的想法
最一開始的想法大概花費10分鐘定義好,但實際上較為複雜我的想法是從個別List取得個別數字,相加後,再存成list
宣告變數 a1, a2. sum
Traverse List1 長度
檢查 list1 的值,逐項相加,存入變數a1
Traverse List2 長度
檢查 list2 的值,逐項相加,存入變數a2
sum = a1 +a2;
建立新list,反向存入sum 中的值
...
從排序鏈結串列刪除重複 | Easy | LeetCode#83. Remove Duplicates from Sorted List
題目敘述
題目難度: Easy
題目敘述: 給定一個排序鍊結串列的 head, 刪除所有重複節點,每個節點元素僅能出現一次,回傳排列串列
解法
這是第一次改用 C++ 寫 Linked List 題目,但由於題目是 single linked list,因此沒能夠用到透過 double linked list 實作的 std:list STL Library,有點小可惜,所以思路上還是用到了慣用的 C
時間紀錄:
想解決辦法: 1min
實際撰寫程式碼: 15 minutes
大概 Run 兩次,第一次沒有考慮到結尾 Null Pointer 的狀況
一開始的想法
定義好兩個指標,分別指到前一個節點跟當前節點
遍歷整個list
每次都檢查當前節點值與前一個節點值是否一樣,結束後更新指標值
回傳head
我的解法1234567891011121314151617181920 ...
Group Anagrams | Medium |LeetCode#49 Group Anagrams
題目敘述
題目難度: Medium
題目描述: 題目要求給定一個字串陣列 strs,需要將 Anagrams 分組,並且回傳經過分組過的陣列,回傳陣列中的Anagrams 可以是任何順序
Anagram 代表兩個單字裡面組成的字母和數量是完全一樣的,簡單來說 Anagram 就是由A單字重新排列組合成一個B單字。
解法一開始的想法
迭代 Input Vector
為每個Obj 建立Table
迭代 Vector 檢查是否有其他匹配的 Pair
如果有 insert item
我的解法我後來沒有在時間內解出來,因此還是參考了一下網路上的作法
123456789101112131415161718192021222324252627282930313233class Solution {public: vector<vector<string>> ...
有效的 Anagram | Easy |LeetCode#242 Valid Anagram
題目敘述
題目難度: Easy
題目敘述: 題目要求給定兩個字串 s 與 t,若 t 為 s 的 Anagram,則回傳 true,若不是則回傳 false
Anagram 代表兩個單字裡面組成的字母和數量是完全一樣的,簡單來說 Anagram 就是由A單字重新排列組合成一個B單字。
解法一開始的想法這次的想法一樣是建立 HashTable,所以一開始的想法如下:
迭代 s,建立 HashTable
迭代 t,依序檢查字母是否有出現在 HashTable,進行比對
迭代完畢後,若全部匹配則回傳True
若無則否
我的解法1234567891011121314151617181920212223242526272829303132333435363738class Solution {public: bool isAnagram(string s, string ...
整數到羅馬數字 | Medium |LeetCode#12 Integer to Roman
題目敘述
題目難度:Medium
題目敘述:題目主要需求是將輸入的整數 num 轉換成對應的羅馬數字符號,並給定一個對應表,在轉換過程有幾項轉換規則:
羅馬數字是通過從最高位到最低位將小數位值的轉換連接起來形成的
如果該值不以4或9開頭,則選擇可以從輸入中減去的最大值的符號,將該符號附加到結果中,減去其值,然後將剩餘部分轉換為羅馬數字。
如果該值以4或9開頭,則使用表示從下一個符號中減去一個符號的減法形式,例如,4是 5(V)減去1(I):IV,而9是10(X)減去1(I):IX。只使用以下減法形式:4(IV)、9(IX)、40(XL)、90(XC)、400(CD)和900(CM)。
只有10的次方(I、X、C、M)可以最多連續附加3次以表示10的倍數。不能多次附加5(V)、50(L)或500(D)。如果需要附加4次符號,需使用減法形式
限制: 1 <= num <= 3 ...
C++ 刷題利器 - STL (Standard Template Library) | LeetCode
這篇主要是來記錄學習STL,並且在刷題過程中方便查找好用的STL的筆記