数据结构 面试题
文章目錄
- 1.數(shù)組
- 1.1 尋找數(shù)組中第二小的元素
- 1.2 找到數(shù)組中第一個(gè)不重復(fù)出現(xiàn)的整數(shù)
- 1.3合并兩個(gè)有序數(shù)組
- 1.4 重新排列數(shù)組中的正值和負(fù)值
- 2.棧
- 2.1 前綴表達(dá)式,中綴表達(dá)式,后綴表達(dá)式
- 2.1.1 中綴表達(dá)式轉(zhuǎn)化為后綴表達(dá)式
- 2.1.2 中綴表達(dá)式轉(zhuǎn)化為前綴表達(dá)式
- 2.2使用棧計(jì)算后綴表達(dá)式
- 2.3對(duì)棧的元素進(jìn)行排序
- 2.4判斷表達(dá)式是否括號(hào)平衡
- 3.隊(duì)列
- 3.1 使用隊(duì)列表示棧
- 3.2 對(duì)隊(duì)列的前k個(gè)元素倒序
- 3.3 使用隊(duì)列生成從1到n的二進(jìn)制數(shù)
- 4.鏈表
- 4.1 反轉(zhuǎn)鏈表
- 4.2檢測(cè)鏈表中的循環(huán)
- 4.3返回鏈表倒數(shù)第N個(gè)節(jié)點(diǎn)
- 4.4刪除鏈表中的重復(fù)項(xiàng)
- 5.樹
- 5.1 求二叉樹的高度
- 5.2 在二叉搜索樹中查找第k個(gè)最大值
- 5.3 查找與根節(jié)點(diǎn)距離k的節(jié)點(diǎn)
- 5.4 在二叉樹中查找給定節(jié)點(diǎn)的祖先節(jié)點(diǎn)
- 6.圖
- 6.1 實(shí)現(xiàn)廣度和深度優(yōu)先搜索
- 6.2檢查圖是否為樹
- 6.3計(jì)算圖的邊數(shù)
- 6.4找到兩個(gè)頂點(diǎn)之間的最短路徑
- 7.字典樹(這是一種高效的樹形結(jié)構(gòu),但值得單獨(dú)說(shuō)明)
- 7.1 計(jì)算字典樹中的總單詞數(shù)
- 7.2 打印存儲(chǔ)在字典樹中的所有單詞
- 7.3 使用字典樹對(duì)數(shù)組的元素進(jìn)行排序
- 7.4 使用字典樹從字典中形成單詞
- 7.5 構(gòu)建T9字典(字典樹+ DFS )
- 8.散列表(哈希表)
- 8.1 在數(shù)組中查找對(duì)稱鍵值對(duì)
- 8.2 追蹤遍歷的完整路徑
- 8.3 查找數(shù)組是否是另一個(gè)數(shù)組的子集
- 8.4 檢查給定的數(shù)組是否不相交
1.數(shù)組
1.1 尋找數(shù)組中第二小的元素
思路:升序排序之后,輸出第二個(gè)數(shù)字
1.2 找到數(shù)組中第一個(gè)不重復(fù)出現(xiàn)的整數(shù)
1.3合并兩個(gè)有序數(shù)組
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 重新排列數(shù)組中的正值和負(fù)值
2.棧
2.1 前綴表達(dá)式,中綴表達(dá)式,后綴表達(dá)式
2.1.1 中綴表達(dá)式轉(zhuǎn)化為后綴表達(dá)式
中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式的規(guī)則:
- 1.遇到操作數(shù),直接輸出;
- 2.棧為空時(shí),遇到運(yùn)算符,入棧;
- 3.遇到左括號(hào),將其入棧;
- 4.遇到右括號(hào),執(zhí)行出棧操作,并將出棧的元素輸出,直到彈出棧的是左括號(hào),左括號(hào)不輸出;
- 5.遇到其他運(yùn)算符’+”-”*”/’時(shí),彈出所有優(yōu)先級(jí)大于或等于該運(yùn)算符的棧頂元素,然后將該運(yùn)算符入棧;
- 6.最終將棧中的元素依次出棧,輸出。
經(jīng)過(guò)上面的步驟,得到的輸出既是轉(zhuǎn)換得到的后綴表達(dá)式。
2.1.2 中綴表達(dá)式轉(zhuǎn)化為前綴表達(dá)式
2.2使用棧計(jì)算后綴表達(dá)式
2.3對(duì)棧的元素進(jìn)行排序
2.4判斷表達(dá)式是否括號(hào)平衡
3.隊(duì)列
3.1 使用隊(duì)列表示棧
3.2 對(duì)隊(duì)列的前k個(gè)元素倒序
3.3 使用隊(duì)列生成從1到n的二進(jìn)制數(shù)
4.鏈表
4.1 反轉(zhuǎn)鏈表
4.2檢測(cè)鏈表中的循環(huán)
4.3返回鏈表倒數(shù)第N個(gè)節(jié)點(diǎn)
4.4刪除鏈表中的重復(fù)項(xiàng)
5.樹
5.1 求二叉樹的高度
5.2 在二叉搜索樹中查找第k個(gè)最大值
5.3 查找與根節(jié)點(diǎn)距離k的節(jié)點(diǎn)
5.4 在二叉樹中查找給定節(jié)點(diǎn)的祖先節(jié)點(diǎn)
6.圖
6.1 實(shí)現(xiàn)廣度和深度優(yōu)先搜索
6.2檢查圖是否為樹
6.3計(jì)算圖的邊數(shù)
6.4找到兩個(gè)頂點(diǎn)之間的最短路徑
7.字典樹(這是一種高效的樹形結(jié)構(gòu),但值得單獨(dú)說(shuō)明)
7.1 計(jì)算字典樹中的總單詞數(shù)
7.2 打印存儲(chǔ)在字典樹中的所有單詞
7.3 使用字典樹對(duì)數(shù)組的元素進(jìn)行排序
7.4 使用字典樹從字典中形成單詞
7.5 構(gòu)建T9字典(字典樹+ DFS )
8.散列表(哈希表)
8.1 在數(shù)組中查找對(duì)稱鍵值對(duì)
8.2 追蹤遍歷的完整路徑
8.3 查找數(shù)組是否是另一個(gè)數(shù)組的子集
8.4 檢查給定的數(shù)組是否不相交
參考:
(1) https://baijiahao.baidu.com/s?id=1609200503642486098&wfr=spider&for=pc - (應(yīng)對(duì)程序員面試,你必須知道的八大數(shù)據(jù)結(jié)構(gòu))
總結(jié)
- 上一篇: DDOS攻击原理介绍,可怕的DDos攻击
- 下一篇: 整合并接班MSN!Win8版Skype完