《劍指Offer》是很多程序員面試前要看的書,但里面的算法都是基於C++實現的,最近用了三周左右時間,用Python完成了里面幾乎所有的算法題,由於時間以及個人水平均有限,或許會有部分問題沒有發現,希望大家發現后能指出,在此感謝大家!也希望我寫的東西能對大家有一點幫助。所有源代碼請在這里獲取。
Python-Offer的主要特點簡介如下:
- 所有題目按照書中章節排列,便於查詢;
- 每個題目單獨一個文件,文件可以直接運行,便於測試以及查看結果;
- 作為2的補充,對於二叉樹和單鏈表這種類型的題目,文件中都會有二叉樹或者單鏈表的實現,例如面試題50中,增加了使用列表創建二叉樹,以及獲取二叉樹中某個結點的輔助代碼;
- 由於Python和C++語言特性存在不同,部分題目會利用Python的特點,實現思路和書中不一致,例如實現單例模式;
- 對於每個題目,簡要說出了主要思路以及在Python中可能需要注意的地方面試題12
- 在做題過程中,部分對於書中不理解或者書中實現對於Python來說有問題的地方,用博客進行了更詳細的補充說明,例如面試題32;
- 不足1:部分題目可能存在考慮不周或者測試用例不全,導致部分用例不通過;
- 不足2:部分題目的實現方式並沒有充分利用Python的特點,不是那么Pythonic,應該有更好的解決辦法。
- 所有的代碼請在這里獲取;
- 下面是目錄。
第2章 面試基礎知識
2.2 編程語言
面試題2 使用Python實現單例模式
2.3 數據結構
面試題3 二維數組中的查找
面試題4 替換空格
面試題5 從尾到頭打印單鏈表
面試題6 重建二叉樹
面試題7 用兩個棧實現隊列
2.4 算法和數據操作
面試題8 旋轉數組的最小數字
面試題9 斐波那契數列
面試題10 二進制中1的個數
第3章 高質量代碼
3.3 代碼的完整性
面試題11 數值的整數次方
面試題12 打印1到最大的n位數
面試題13 O(1)時間刪除鏈表結點
面試題14 調整數組順序使寄數位於偶數前面
3.4 代碼的魯棒性
面試題15 鏈表中倒數第k個結點
面試題16 反轉鏈表
面試題17 合並兩個排序的鏈表
面試題18 樹的子結構
第4章 解決面試題思路
4.2 畫圖讓抽象問題形象化
面試題19 二叉樹的鏡像
面試題20 順時針打印矩陣
4.3 舉例讓抽象問題具體化
面試題21 包含min函數的棧
面試題22 棧的壓入彈出序列
面試題23 從上往下打印二叉樹
面試題24 二叉樹的后序遍歷序列
面試題25 二叉樹中和為某一值的路徑
4.4 分解讓復雜問題簡單化
面試題26 復雜鏈表的復制
面試題27 二叉搜索樹與雙向鏈表
面試題28 字符串的排列
第5章 優化時間和空間效率
5.2 時間效率
面試題29 數組中出現次數超過一半的數字
面試題30 最小的k個數
面試題31 連續子數組的最大和
面試題32 從1到n整數中1出現的次數
面試題33 把數組排成最小的數
5.3 時間效率與空間效率的平衡
面試題34 丑數
面試題35 第一個只出現一次的字符
面試題36 數組中的逆序對
面試題37 兩個鏈表的第一個公共結點
第6章 面試能力
6.3 知識遷移能力
面試題38 數字在排序數組中出現的次數
面試題39 二叉樹的深度
面試題40 數組中只出現一次的數字
面試題41 和為s的兩個數字VS和為s的連續正數序列
面試題42 翻轉單詞順序與左旋轉字符串
6.4 抽象建模能力
面試題43 n個骰子的點數
面試題44 撲克牌的順子
面試題45 圓圈中最后剩下的數字
6.5 發散思維能力
面試題46 求1+2...+n
面試題47 不用加減乘除做加法
面試題48 不能被繼承的類
第7章 面試案例
7.1 案例一
面試題49 把字符串轉化成整數
7.2 案例二
面試題50 樹中兩個結點的最低公共祖先
