力扣君看到這個問題的時候,已經時隔 N 年,力扣(LeetCode)上的題目已經有 1000+ 了。
一目了然的題目分類
力扣的題覆蓋面極大,目前已有 1000+ 公開題目資源,涉及了許多演算法與數據結構,有貪心,搜尋,動態規劃,連結串列,二元樹,哈希表等。這些題目所涉及的知識點都有很大的實際套用價值,所以,力扣不僅對題目難度進行了劃分,而且我們還對題目的知識點做了分類,為每一道題都打上了標簽,您可以在所有題目中篩選出您感興趣的主題進行訓練,我們相信您在經過一段時間訓練後,一定會變得更強,並很有可能拿到心儀的 Offer。
據我們了解到的情況,Easy 題和 Medium 題在面試中比較常見,通常會以手寫程式碼之類的形式出現,您需要對問題進行分析並給出解答,並於面試官進行交流溝通,有時還會被要求分析時間復雜度與空間復雜度,面試官會透過您對題目的分析解答,了解您對常用演算法的熟悉程度和您的程式實作功底。
而在一些對演算法和程式實作功底要求較高的崗位,Hard 題也是很受到面試官的青睞,如果您在面試中成功 Bug-Free 出一道 Hard 題,我們相信您一定會給面試官留下很深刻的印象,並極大增加拿到 Offer 的機率,據相關人士統計,如果您在面試中成功解出一道 Hard 題,大機率就能拿到 Offer 了。
所以, 力扣中 Easy 和 Medium 相當於面試中的常規題,而 Hard 則相當於面試中較難的題,解出一道 Hard 題,那你已經向你的 Dream Offer 邁進了一大步了。力扣的題那麽多,面試準備時間往往沒那麽多,怎麽辦呢?誰都想花最少的時間能事半功倍吧!力扣的每道題都會標識出它在面試中的出現頻率,大家完全可以有的放失的進行刷題,既省時間效率也高!
多種語言支持
力扣目前支持 16+ 種程式語言:C++, Java, Python, Rust, Kotlin 等語言,不管您的擅長語言是哪一種,你都將在力扣獲得愉快的做題體驗,因為你能更好地註重於問題所用演算法與數據結構本身,而不是糾結於您不擅長語言的細節上。
題目這麽多?應該如何刷?
刷題前準備
首先,刷題前你需要具備一些演算法和數據結構的基礎,這些基礎包括:
1. 常考的數據結構: 陣列、字串、連結串列、樹(如二元樹)等
2. 常考的演算法: 分治、貪心、窮舉、動態規劃、回溯等
時間充裕的同學可以按照下圖進行系統性地學習:
同時可以搭配相關書籍進行學習:
1.【 演算法第 4 版 】- Robert Sedgewick
適合初學者入門
2.【 數據結構和演算法分析- C 語言描述 】- Mark Allen Weiss
需要有一定 C 語言基礎
3.【 編程珠璣 】- Jon Bentley
4.【 演算法導論 】- Cormen,T.H.
有一定演算法基礎以後可以去學習【演算法導論】。
先把這些基礎的演算法和數據結構知識梳理一遍,在理解的基礎上再去力扣上刷題,可以讓刷題事半功倍。
開始刷題
我相信很多剛開始刷力扣的小夥伴開啟網站後,面對這上千道難易度層次不齊的題目就懵了,完全不知從何下手。 我的建議是可以先從一些 簡單的題目 開始,在題庫頁面我們可以使用篩選工具將難度選擇為「 簡單 」。同時還可以添加多個種類的篩選條件,比如我想要刷陣列的題目,我們可以再選擇一個「 陣列 」的話題標簽,那麽我們就可以從所有的陣列簡單題開始練習了。這些操作在學習工具頁面底部的「 題目列表 」中你也是可以找到的。
或者你可以從 題解多 的題目開始練習,這樣即使被某個問題卡住了,也能透過其他使用者的優質題解開啟解題思路。
力扣題解
力扣題解區高手雲集,題解沒有最好只有更好,兩數之和這道題,你有多少種解法呢?
解題技巧
學習演算法要漸次進行,先掌握一類演算法,鉆研透了再去掌握另一類。俗話說「貪多嚼不爛」。碰到不會的題目可以多去題解區看看其他人的解題思路,將每一道題目吃透。
可以參考力扣君之前釋出的一個回答
解題範例
對待每一道題目都應該追求完美,看看同一道題自己能想出多少種解法,其他題目是否可以用同樣的解題思路。
比如力扣上的第 3 題「 無重復字元的最長子串 」
題目描述:
給定一個字串,請你找出其中不含有重復字元的 最長子串 的長度。
範例 1:
範例 2:
範例 3:
這道題目基本解題思路是 滑動視窗 ,我們是否還可以用其他的解法?做完這道題目以後,再去練習「滑動視窗」相關題目鞏固一下:
30. 串聯所有單詞的子串
76. 最小覆蓋子串
159. 至多包含兩個不同字元的最長子串
209. 長度最小的子陣列
239. 滑動視窗最大值
567. 字串的排列
632. 最小區間
727. 最小視窗子序列
面試突擊
刷題時間不充裕的同學,可以從 【
高頻演算法面試匯總
】的探索卡片開始刷起,或者從題庫頁右側的「熱門推薦」開始刷起。
真題演練
題目刷到一定數量以後,如果想測試一下自己在真實面試中的水平可以來一場模擬面試。模擬面試還是相對比較有挑戰的,尤其是在有限的時間內能快速 bug free AC 這些題目。
模擬完成後,你也能看到自己詳細的面試報告,了解自己的欠缺所在。個人覺得在每次模擬面試時,都要爭取全部透過才是最穩妥的,如果沒有在規定時間內完成面試題目,面試結束後也一定要花時間將沒有做出來的題弄懂,然後再次模擬該企業面試,這樣才能在真正面試時有備無患。
此外,面試頁面有一個搜尋框可以用來搜尋各大公司的面試真題。如果你面試目標明確,可以直接搜尋想要去的公司進行有針對性的反復練習,爭取一舉拿下 offer。
說了那麽多,還是需要各位程式設計師們的執行力,在學習的過程中不能只是收藏學習資源卻沒有實際行動,不要給自己明天再開始學習的念想。
從現在開始準備起來吧!祝願每一位小夥伴都能在力扣上學有所得,找到自己心儀的工作。
歡迎各位知友關註力扣官方微信公眾號:「 LeetCode力扣 」,更多關於程式設計師面試、技術幹貨的內容等你來啃!