文章目錄
- 1.數組
- 1.1 尋找數組中第二小的元素
- 1.2 找到數組中第一個不重復出現的整數
- 1.3合并兩個有序數組
- 1.4 重新排列數組中的正值和負值
- 2.棧
- 2.1 前綴表達式,中綴表達式,后綴表達式
- 2.1.1 中綴表達式轉化為后綴表達式
- 2.1.2 中綴表達式轉化為前綴表達式
- 2.2使用棧計算后綴表達式
- 2.3對棧的元素進行排序
- 2.4判斷表達式是否括號平衡
- 3.隊列
- 3.1 使用隊列表示棧
- 3.2 對隊列的前k個元素倒序
- 3.3 使用隊列生成從1到n的二進制數
- 4.鏈表
- 4.1 反轉鏈表
- 4.2檢測鏈表中的循環
- 4.3返回鏈表倒數第N個節點
- 4.4刪除鏈表中的重復項
- 5.樹
- 5.1 求二叉樹的高度
- 5.2 在二叉搜索樹中查找第k個最大值
- 5.3 查找與根節點距離k的節點
- 5.4 在二叉樹中查找給定節點的祖先節點
- 6.圖
- 6.1 實現廣度和深度優先搜索
- 6.2檢查圖是否為樹
- 6.3計算圖的邊數
- 6.4找到兩個頂點之間的最短路徑
- 7.字典樹(這是一種高效的樹形結構,但值得單獨說明)
- 7.1 計算字典樹中的總單詞數
- 7.2 打印存儲在字典樹中的所有單詞
- 7.3 使用字典樹對數組的元素進行排序
- 7.4 使用字典樹從字典中形成單詞
- 7.5 構建T9字典(字典樹+ DFS )
- 8.散列表(哈希表)
- 8.1 在數組中查找對稱鍵值對
- 8.2 追蹤遍歷的完整路徑
- 8.3 查找數組是否是另一個數組的子集
- 8.4 檢查給定的數組是否不相交
1.數組
1.1 尋找數組中第二小的元素
思路:升序排序之后,輸出第二個數字
1.2 找到數組中第一個不重復出現的整數
1.3合并兩個有序數組
def merge_sort(a, b):
ret = []
i = j = 0
while len(a) >= i + 1 and len(b) >= j + 1:if a[i] <= b[j]:ret.append(a[i])i += 1else:ret.append(b[j])j += 1
if len(a) > i:ret += a[i:]
if len(b) > j:ret += b[j:]
return retif __name__ == '__main__':
a = [1,3,4,6,7,78,97,190]
b = [2,5,6,8,10,12,14,16,18]
print(merge_sort(a, b))
1.4 重新排列數組中的正值和負值
2.棧
2.1 前綴表達式,中綴表達式,后綴表達式
2.1.1 中綴表達式轉化為后綴表達式
中綴表達式轉后綴表達式的規則:
- 1.遇到操作數,直接輸出;
- 2.棧為空時,遇到運算符,入棧;
- 3.遇到左括號,將其入棧;
- 4.遇到右括號,執行出棧操作,并將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出;
- 5.遇到其他運算符’+”-”*”/’時,彈出所有優先級大于或等于該運算符的棧頂元素,然后將該運算符入棧;
- 6.最終將棧中的元素依次出棧,輸出。
經過上面的步驟,得到的輸出既是轉換得到的后綴表達式。
2.1.2 中綴表達式轉化為前綴表達式
2.2使用棧計算后綴表達式
2.3對棧的元素進行排序
2.4判斷表達式是否括號平衡
3.隊列
3.1 使用隊列表示棧
3.2 對隊列的前k個元素倒序
3.3 使用隊列生成從1到n的二進制數
4.鏈表
4.1 反轉鏈表
4.2檢測鏈表中的循環
4.3返回鏈表倒數第N個節點
4.4刪除鏈表中的重復項
5.樹
5.1 求二叉樹的高度
5.2 在二叉搜索樹中查找第k個最大值
5.3 查找與根節點距離k的節點
5.4 在二叉樹中查找給定節點的祖先節點
6.圖
6.1 實現廣度和深度優先搜索
6.2檢查圖是否為樹
6.3計算圖的邊數
6.4找到兩個頂點之間的最短路徑
7.字典樹(這是一種高效的樹形結構,但值得單獨說明)
7.1 計算字典樹中的總單詞數
7.2 打印存儲在字典樹中的所有單詞
7.3 使用字典樹對數組的元素進行排序
7.4 使用字典樹從字典中形成單詞
7.5 構建T9字典(字典樹+ DFS )
8.散列表(哈希表)
8.1 在數組中查找對稱鍵值對
8.2 追蹤遍歷的完整路徑
8.3 查找數組是否是另一個數組的子集
8.4 檢查給定的數組是否不相交
參考:
(1) https://baijiahao.baidu.com/s?id=1609200503642486098&wfr=spider&for=pc - (應對程序員面試,你必須知道的八大數據結構)