目前找工作競爭越來越大,很多大的公司都很重視應聘者的算法能力,所以掌握好算法尤為重要。
這里說一下我認為算法應該怎么刷。
1.打牢基本功
在刷算法的初級階段,我們應該掌握好基礎知識,包括常用的數據結構和算法。
數據結構:數組、棧、鏈表、圖、散列表、隊列、樹、堆
常用的算法:貪心、分治、窮舉、動態規划、回溯、遞歸、深度優先搜索、廣度優先搜索。
在學習這些知識的時候,推薦結合着相關書本和視頻看。學完一個知識點后結合着相關題進行練習,以熟練掌握這個知識點。這里推薦下牛客的算法視頻課,這些課程從易到難,大家可以根據自己目前的水平自由選擇。講課的老師是大名鼎鼎的左程雲老師,從2010年起專注刷題至今,擁有10年算法刷題經驗。跟着學完這些課程,對你的算法能力絕對有很大的提升。
《算法基礎入門班》:https://www.nowcoder.com/courses/cover/live/509
《算法基礎提升班》:https://www.nowcoder.com/courses/cover/live/500
《算法筆面試真題精講中級班》:https://www.nowcoder.com/courses/cover/live/503
《算法筆面試真題精講高級班》:https://www.nowcoder.com/courses/cover/live/482
每學完一個知識點后,及時的找一些對應的題來練習,這里推薦
牛客題霸:https://www.nowcoder.com/ta/job-code-high
牛客題霸上將所有的算法題目都做了分類,我們可以手動選擇自己想刷的題型。
2.難度從易到難
刷題的時候,不要一上來就要刷很難的題,不重視簡單的題,急於求成,認為只要把難題搞懂了,簡單的題就不在話下,這種想法是不對的。刷法能力的提升不是一天兩天就可以見到效果的,我們應該從簡單的開始刷,循序漸進,由易到難,打牢自己的基本功。如果一上來就做特別難的題,花了很長時間都沒有做出來,不僅打擊了自己得信心時間也浪費了,還會對刷算法產生抵觸心理。如果從簡單得題開始刷,每做出一題就會有一絲絲成就感,這樣刷題得效率提上去了,自己也會越來越喜歡刷題。如果刷簡單得題都需要花很長的時間,建議再花一點時間把上面介紹的刷題的基本知識看看,磨刀不誤砍柴工。當我們遇到不會刷的題時,如果已經花了很長時間,這時可以看看他人的題解,如果題解都看得很吃力的話,建議先把這題放一放,先刷其他的題,等到最后再來刷這些題。
3.按分類來刷題
在刷題的過程中,建議按分類來刷題,如在一段時間內只刷動態規划相關的題。這樣可以集中精力對一個知識點反復練習,這樣可以加深對這個知識點的理解,提高刷題的效率。這樣當下次再刷到同類型的題時,可以很快的有思路。
當然,如果已經刷了很多算法題的同學,可以不按照分類的方式來刷,這樣可以鍛煉思維的靈活性。
4.及時總結鞏固
當我們刷完一道算法題時,一定要將解題思路、代碼的注釋寫好,這樣當我們下次再看到這道題時就可以很快的撿起這道題,不必再花大量的時間從頭分析。另外,在刷題的時候,也不要一下子刷很多題,建議每刷完3~5道題就總結一下。然后第二天再將前一天刷過的題拿出來看看復習一下。過一個星期再將上個星期的題拿出來總結一下,不要刷完就忘了。還有一點,刷題是一個不斷堅持的過程,重在一點一滴的積累,所以不要三天打魚兩天曬網。如果中間間隔一個多星期不刷的話,再刷起題來就會感到手生。
在總結題目這塊,要將一些常用的方法套路總結出來。比如:見到一個排序數組的題就應該想到能不能用二分法來做、見到樹相關題就要想到用遞歸要不要借助隊列、見到一些鏈表的題要不要用雙指針、要不要用偽頭節點等。例如:牛客題霸NC78反轉鏈表中用指針保存節點的前驅和后繼、 牛客題霸NC4判斷鏈表中是否有環中用的是快慢指針、牛客題霸NC33合並有序鏈表中用的偽頭節點。
。。。。。。。
最后,再次強調刷算法是一個長期的系統的工程,不是一朝一夕就可以練成的,一定要堅持下去哦。
【注】:本人水平有限,以上只代表個人觀點,如有錯誤,歡迎各位大佬批評指正。