本文為《劍指Offer》刷題筆記的總結篇,花了兩個多月的時間,將牛客網上《劍指Offer》的66道題刷了一遍,以博客的形式整理了一遍,這66道題屬於相對基礎的算法題目,對於刷題練手是很好的實踐,接下來會繼續回到LeetCode,爭取每天拿出一個小時,刷一到兩道題。
本文主要對這66道題做一個總結,整體來看,這66道題,涉及到了常用的數據結構:數組、字符串、鏈表、樹、二叉樹、棧、隊列,還有在編程中經常用到的數據操作和算法:循環、遞歸、查找、排序、回溯、動態規划、位運算。以下對這66道題做一個歸類。
從這些題目中,我們可以學習到以下一些解題經驗:
- 首先要真正理解題意,對於一些不確定的情況,比如輸入輸出格式,可以追問。
- 思考要全面,對於特殊情況,比如指針為null,輸入為空等等情況,要充分考慮,保證代碼的完整性和魯棒性。
- 當遇到一個比較復雜的問題時,可以通過畫圖、舉例或者分解來考慮,從具體的實例中總結普遍規律。
- 注重效率的考量,這66道題用蠻力法解決可能都不是很難,但是我們需要考慮的是時間效率和空間效率的平衡,以空間換時間有時候是一個不錯的選擇。
- 常用數據結構和數據操作是基礎,要重點掌握,如樹的遍歷,排序,查找,遞歸等操作,在題目中反復用到,要深刻理解算法思想。