# LEECODE 筆記 # 常用工具語法 ## Array 1. n:i for i, n in enumerate(nums1) --> 取index+數字 2. s_list = list(s) -->字串轉陣列-->''.join(s_list)-->組合回來 3. arr.reverse()-->array反過來,不須賦值 4. arr.split() ![image](https://hackmd.io/_uploads/r1o8aibjkl.png) ## Set ## Queue q = collections.deque() #建立queue q.append("元素") #加入變數 first_element = q.popleft() # 返回並移除最左側元素 "元素1" ## Stack stack.append("元素1") # 加入element top_element = stack.pop() # 返回並移除"最頂element" ## Dictionary value = d.get("key") # 字典取值,如果沒有值不會拋錯 ![image](https://hackmd.io/_uploads/BJWz6tlsJe.png) ## 正負無窮大 float('-inf') = 負無限大 float('inf') = 正無限大 # 模組好題目 ## Two Pointer 題目: 392. Is Subsequence ## Prefix Sum 使用點:找一段array,index i ~ index j 的sum ![image](https://hackmd.io/_uploads/By0WsdloJe.png) ![image](https://hackmd.io/_uploads/HJoEodxiyg.png) ## Monotonic(單調_遞增or遞減) Stack **使用點: 找next/previous greater 或是 next/previous smaller element in an array** 當找到一個比stack頂部數字大的數字時,這個數字就是頂部元素的"下一個更大元素",我們不斷彈出堆疊頂部元素,直到遇到一個>當前元素的元素或堆疊為空。 ex: nums2 = [1,3,4,2] ![image](https://hackmd.io/_uploads/BkvsDtxoJe.png) 題目: 1. 496. Next Greater Element I ## Sliding Window 題目: 1. 643. Maximum Average Subarray I ## Tree 使用點: 1. BST取得小~大排序->Inorder Traversal 2. serialization一棵樹->Preorder Traversal 3. 處理子節點再處理父節點->Postorder Traversal 4. 上至下,左至右->Level Order Traversal 5. 樹的最大深度 ```python def maxDepth(self, root: Optional[TreeNode]) -> int: if not root: return 0 return 1 + max(self.maxDepth(root.left), self.maxDepth(root.right)) ``` 6. # SQL 1. select <font color="#f00">distinct</font>(xxx) -->選取不重複 2. order by xxx/1 --> 預設ASC(升)/DESC(降) 3. group by -->分類聚合函數的結果-->進一步篩選用Having 4. 日期差異-->DATEDIFF(end_date, start_date) ![image](https://hackmd.io/_uploads/Bya84Q13yl.png)