刷了一個半月算法題,我薪資終於Double了

前言

昨天的發了算法和數據結構後,很多人表示意猶未盡,感覺大公司都是要手寫算法,那刷題是必不可少了,你技術再厲害,這關過不了,很多機會也會和你失之交臂,很多讀者刷了不少算法去了頭條,拼多多,薪資一下就double,比如之前20k,跳槽一下就40k,你說羨慕不羨慕。所以算法和數據結構,對程序員很重要。當然今天這篇文章不是來打廣告的,而是小豪同學整理了一些刷題心得分享給大家,因爲方法大於勤奮,他15年畢業,之前一直在某TMD某家,刷了一個半月算法題,目前跳槽去了頭條,薪資38k(多少k,他和我,沒有利益相關,小豪同學滿意就行)。小豪同學說這些心得有參考網上的《不羈的程序員小王》和《暢雨瀟瀟_》大佬總結,所以這裏特意說明下,下面進入正文:

不要爲了AC而AC

第一次刷題還是大二,同學之間挺流行一個Java的經典編程50題,第一遍AC耗時一個多月,過程很痛苦有好幾次想要放棄,看題不懂方法,很難理解他人方案,很多題目看了答案只是知其然而不知其所以然,從不考慮複雜度,都是暴力法直接解決,很多解題方法通過看別人的方案去歸納,照着抄。一個多月的時間自己算是入門了,第二遍的時候輕鬆很多。

現在看來刷題是沒有技巧的,就是多做題多練多總結,對於很多新手不要去想是不是還有最優解什麼的,你做的就是暴力法求解,刷題是很枯燥的,你需要給自己一點鼓勵,當把題目解決以後再去考慮其他的,在你不能很快的解決問題的時候,可是試着寫點僞代碼或者畫個流程圖。當你經過大量的練習,會形成條件反射知道這是什麼類型的題,用什麼方法解決。

LeetCode刷題系列是按照某個專題進行的,這樣對比着刷題效果是比較好的。千萬不要耍小聰明用一些奇巧淫技,思路不對再怎麼繞都是浪費時間。

遇到問題多找輪子,一定有人跟你一樣菜遇到過同樣的問題,同樣不要想着自己造輪子,絕大多數問題前輩一定有更好更完善的方案在,自己造輪子費時費事又沒太大意義。

一定要自己動手實現,看答案和自己做是兩回事,自己做一遍以後會加深對問題的理解。沒必要把所有算法都精通,但起碼在遇到問題時可以找到最優算法解決問題。即知道算法的存在及其用途,按需深入學習。

最重要的一點堅持下去,最簡單且最難的事情就是堅持,每天刷一個題保持良好的手感,時間不用長了,一個月你會有非常大的進步

剛開始刷題的時候,基本上一下午只能A過兩三道easy的算法題,但是我在每次A過之後,都會在討論裏看看別人的算法,把自己覺得叼炸天的算法記錄下來,嘗試理解別人的算法。這種做法給我帶來的最大好處是:增強自己的代碼閱讀能力,並且開闊了我的思路。

先寫思路,再寫代碼

在A題的過程中,我從沒用過IDE編譯代碼看輸出,基本上都是肉眼debug,然後改錯。這個方法是我在A題時別人建議的,這樣可以鍛鍊自己的思維能力,也可以慢慢提高自己寫代碼的全局觀和對異常輸出的處理。

一開始刷題時,我都是有一點思路就嘗試開始寫代碼,寫着寫着發現這種方法不可行,又全部刪掉。後來慢慢變成了先在紙上寫好完整的思路,甚至包括需要聲明幾個變量。這樣雖然一開始可能覺得速度有點慢,但這樣會讓你在真正寫代碼時思路清晰,從而少犯錯誤,並且我覺得這種寫代碼的狀態更好。到後來我在寫算法的時候甚至不是從上到下的編寫,而是先寫算法的框架,再寫每一個部分要完成的功能。自我認爲,這是比較好的敲代碼的方法,並且可以增加自己紙上代碼的能力。

關於測試用例,一般我都是隨便試兩個,通過了就直接submit,但是這樣導致我的AC率很低。後來改成先寫思路的時候,我就先想測試用例,而且想一些極端的,並根據 這些測試用例來寫代碼的一些邊界條件和保護條件,這樣AC率也會慢慢高了。

最後,一定不要滿足自己的算法,儘可能寫出最簡單的代碼,即使是相同的思路,也一定要將代碼減至無法再減爲止。這樣可以增加自己的代碼質量,久而久之,你對這門語言的掌控能力也會得到提升。

刷題是可以鍛鍊的,千萬不要讓算法成爲自己的短板。

歡迎關注我的微信公衆號「碼農突圍」,分享Python、Java、大數據、機器學習、人工智能等技術,關注碼農技術提升•職場突圍•思維躍遷,20萬 碼農成長充電第一站,陪有夢想的你一起成長。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章