leetcode分類高效刷題
leetcode是一個很好的學習算法的一個online judge的網站,通過刷題能夠快速提升自己的算法能力。但是令大家都頭疼的就是,怎么能夠高效的通過leetcode刷題掌握算法的做題技巧,并且順利通過面試。
刷題的時候千萬不要懷疑自己的智商,不要懷疑自己的智商,不要懷疑自己的智商
每個人都要經歷從無到有的過程,剛開始都是不會(大佬請自動忽略),一度懷疑自己的智商。剛開始做題,一度懷疑自己是不是不適合編程,硬著頭皮做下去,分類刷完這些類別之后,再拿到題目時,自己有了一些思路,困難的題目雖然還是做不出來,但是已經有了思路,發現很多也沒那么難。
小伙伴們加油一起熬過這段苦逼的時光,堅持下來,一段時間之后會發現自己已經有了很大長進了,相信等你刷完這個倉庫中分類的200多道題,回頭看發現自己已經之前厲害了好多。
leetcode刷題一方面為后期的面試做準備,同時也用于學習一定的算法基礎,通過刷題實訓來提高自己的工程能力,
本項目的代碼實現均采用python實現,但是不采用python庫中的函數,基本上采用算法思想實現,所以具體的語言
并不重要,但是對于其他的語言可能要考慮越界與數據類型轉換的問題
本倉庫記錄自己的做題過程,分類別整理一部分基礎并且經典的習題,分類別刷題有助于算法思想的培養。
推薦大家關注下邊的技術博客,各個類別的題目整理比較詳細。
清晰的頁面顯示及一些其他類型的技術文章,請參考博客:
分類整理項目介紹
將算法題目分門別類的進行整理,將一個題目相關的類型多做幾道,熟練算法思想
分類別進行刷題,是一個非常高效的方法,但是直接使用leetcode的類別標簽做題,很難從中找到代表性的題目,自己很難通過這些題目總結自己的一個算法做題的框架,對于算法的思路整理熟練并不十分有用,本項目就是記錄自己的刷題leetcode過程中,根據網絡上的資料及自己看的算法課程,總結了在leetcode上每個類別的代表性的題目,
每個類別整理記錄相應的代表性題目,每一類大概整理10幾道題目,相信通過做這些題目,一定會對這一類的算法能有很好的理解,并且對這一類的題目會有思路。每類題目開始的幾道題,會有比較詳細的代碼注釋,后邊的題目解法,大體的解題框架與思路比較一致,就只給出相對應的python代碼實現,所有的代碼均accept,有些題目的解法在leetcode上的效率并不高,但是對于初始刷題做題的解法思路還是比較有幫助,在相應的基礎解決思路上進行優化更有利用算法思想的培養建立。
目前我也正在學習中,分類整理大概各種leetcode算法題目前大概整理230道左右,在刷題過程中持續更新。
對于很多題目,我都整理自己能夠想到的對于思路培養有用的幾種解法,有些題目的解題思路都是從暴力法,然后一步步優化然后想到相對好一點的解法。
請大家記住很有用的一句話:暴力法是思路的起點
對于一道題目,如果沒有思路想想怎么采用暴力法進行求解,可能大多數情況下,這種解法在leetcode上會超時,但是根據對應的暴力法解法,
然后進行時間空間復雜度的優化,也是一個很好的策略。
目前我所做的這些題,常用的暴力法及優化策略就是:
多層循環 ——> 利用hashmap,空間換時間
遞歸回溯 ——> 剪枝,或者對于重疊子問題用dp(動態規劃)
下邊為相應的整理的幾個類別的題目,具體的題目信息,請移步博客
|-- 雙指針
|-- 雙指針(對撞指針)
|-- 雙指針(快慢指針)
|-- 其他雙指針
|-- 哈希表
|-- 哈希表
|-- 排序
|-- 排序
|-- 二分查找
|-- 二分查找
|-- 數組與矩陣
|-- 數組與矩陣
|-- 鏈表
|-- 鏈表
|-- 棧與隊列
|-- 棧與隊列
|-- 樹與遞歸
|-- 遞歸
|-- 遍歷
|-- 二叉搜索樹
|-- 回溯
|-- 貪心算法
|-- 貪心算法
|-- 分治法
|-- 分治法
|-- 動態規劃
|-- 動態規劃
|-- 背包問題
|-- 搜索
|-- 搜索
|-- 圖
|-- 圖
|-- 位運算
|-- 位運算
|-- 每日一題
|-- 每日一題
相信刷完這200多道題,再做題的時候思路就比較明了了。
每日一題
leetcode刷題需要長期堅持,當按類別算法知識基本學習之后,就每天刷一道題,持續更新,部分內容參考:Leetcode 題解