---
# System prepended metadata

title: LEECODE 筆記

---

# 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)
