刷題策略
- 第一遍刷企業top面試題簡單題,記錄每題的解答過程,出乎意料的題記錄到這裏。
- 第二遍刷這裏記錄下的題,同時計算時間複雜度和空間複雜度,寫完打勾。
- 按類別刷題?排序,哈希…等等?
- 刷企業top面試題中等題,同時計算時間複雜度和空間複雜度,並總結答題模板和套路。
一些小技巧
- 異或。兩個相同的數異或的結果爲0,任何數與0異或的結果爲這個數本身。
- 檢查一個float變量x是否爲整數數。C++中好像沒有很好的又簡單的方法,可以判斷
x-(int)x<1e-8
爲true則x可看作整數。
LeetCode 上的題大致分爲三種類型
參考:如何正確高效地使用LeetCode? - 程序員吳師兄的回答 - 知乎
- 考察數據結構,比如鏈表、棧、隊列、哈希表、圖、Trie、二叉樹等
- 考察基礎算法,比如深度優先、廣度優先、二分查找、遞歸等
- 考察基本算法思想:遞歸、分治、回溯搜索、貪心、動態規劃等
TODO的題目
需要再次TODO的題目。
- 【leetcode】53. 最大子序和(Maximum Subarray):我的題解,只寫出了暴力法
- 【leetcode】69. x 的平方根( Sqrt(x) ):我的解法,只寫出了暴力法,二分法有些問題
- 【leetcode】70. 爬樓梯( Climbing Stairs ):我的解法只實現了3種。官方題解有6中解法,有時間看一看
- 【leetcode】121. 買賣股票的最佳時機( Best Time to Buy and Sell Stock ),我的解法。官方題解區有人總結了股票問題的解題模板,看一下。
- 【leetcode】169. 多數元素( Majority Element ) | 我的解答 | 官方題解有很多種方法:排序法,隨機法,分治法,投票法。(分治和投票沒看懂)
- 【leetcode】172. 階乘後的零( Factorial Trailing Zeroes ) | 我的解答
- 【leetcode】189. 旋轉數組( Rotate Array ) | 我的解答 | 我寫的循環替換寫了很多此還是有bug,另外官方題解反轉法挺有意思的。還有個問題,旋轉替換法中,當n%k != 0時,就一定能一直遍歷完不同元素嗎?會不會循環了幾圈又回到原點,但是還有元素沒便利完?如何證明或正否?
- 【leetcode】190. 顛倒二進制位( Reverse Bits ) | 我的解答 | 如果函數會被多次調用,如何優化速度?
- 【leetcode】191. 位1的個數( Number of 1 Bits ) | 我的解答 | 官方的n&(n-1)值得借鑑,另外看到別人貼java中integer類的方法(我覺得這種方法本質是把每一位二進制作爲十進制數相加,例如1011的漢明權重就爲1+0+1+1=3),常數步驟就能算出。最後,如果函數會被多次調用,如何優化速度?
- 【leetcode】198. 打家劫舍( House Robber ) | 我的解答 | 官方題解的動態規劃太簡潔了。wang的解法也很好,遞歸加緩存,以及動態規劃模板。
- 【leetcode】202. 快樂數( Happy Number ) | 我的解答 | 本題有個問題,一是如何證明不存在無限但不循環的情況,一開始沒想通,寫不出來。
- [x]
題目分類
位操作
- 【leetcode】136. 只出現一次的數字( Single Number ) | 我的思路
- 【leetcode】191. 位1的個數( Number of 1 Bits ) | 我的解答 | 官方的n&(n-1)值得借鑑,另外看到別人貼java中inter類的方法,常數步驟就能算出。最後,如果函數會被多次調用,如何優化速度?
- 【leetcode】190. 顛倒二進制位( Reverse Bits ) | 我的解答 | 如果函數會被多次調用,如何優化速度?
- 【leetcode】268. 缺失數字( Missing Number ) | 我的解答
雙指針
- 【leetcode】141. 環形鏈表( Linked List Cycle ) | 我的思路
- 【leetcode】160. 相交鏈表( Intersection of Two Linked Lists ) | 我的思路
- 【leetcode】202. 快樂數( Happy Number ) | 我的解答
- 【leetcode】234. 迴文鏈表( Palindrome Linked List ) | 我的解答
投票法
隨機法
數學法
- 【leetcode】172. 階乘後的零( Factorial Trailing Zeroes ) | 我的解答
- 【leetcode】204. 計數質數( Count Primes ) | 我的解答
- 【leetcode】268. 缺失數字( Missing Number ) | 我的解答
- 【leetcode】326. 3的冪( Power of Three ) | 或者提前算好所有結果
反轉法
動態規劃
- 【leetcode】198. 打家劫舍( House Robber ) | 我的解答 | 官方題解的動態規劃太簡潔了
遞歸
- 【leetcode】206. 反轉鏈表( Reverse Linked List ) | 我的解答 | 遞歸有點巧妙。難點是遞歸後如何返回結果。
- 【leetcode】234. 迴文鏈表( Palindrome Linked List ) | 我的解答 | 遞歸法沒看
鏈表
排序
哈希表
- 【leetcode】242. 有效的字母異位詞( Valid Anagram ) | 我的解答 | TODO: 完成進階要求。 首先要了解unicode,可參考這篇文章
相關/參考鏈接
TODO: 找一些plan,或者how to prepare interview or algorithm 之類的資料比較有用,簡單的知識總結和彙總在沒有plan的前提下毫無作用。
- cplusplus 或 cppreference | 查找c++標準自帶的數據結構和標準函數用法
- 前幾百題題解 | 用於搜索題解
- 五分鐘學算法 在網站上搜"第 x 號題",就可以搜到對應的leetcode動畫題解 。
- leetcode動畫題解
- Algo Deck | 看了bit操作那裏,感覺總結了一些常用運算可能有用: Algo Deck is an Open-Source Collection of +200 Algorithmic Cards to Help you Preparing your Algorithm & Data Structure Interview
- interview | 給出的目錄可以瞭解到要掌握哪些知識點 : 📚 C/C++ 技術面試基礎知識總結,包括語言、程序庫、數據結構、算法、系統、網絡、鏈接裝載庫等知識及面試經驗、招聘、內推等信息。
- 貪婪策略系列 - 覆蓋篇
- 【算法提高班】並查集
- 構造二叉樹系列
- leetcode題解