在職一年,刷題500道,基原本回刷了3遍。碰到稍難的題目仍是想不起來解法;即便寫出來,多數時候會有bug;大部分題目,瞟一眼答案,我會了!本身上手寫的時候半天憋不出來。小白一枚,兩個月刷題400道。刷過的題老忘,二刷的時候仍是不會作;刷題速度快,想不出來,一看答案就會了;堅持不下來,刷到一半不想刷了,再次刷的時候前面的又忘了。程序員
爲何我不建議你刷題?恕我直言,這不是真正的刷題。面試
若是你是小白,這裏的小白指連常見的數據結構,如鏈表、樹以及常見的算法思想,如遞歸、枚舉、動態規劃這些都沒學過的,那麼,我不建議你盲目急着去刷題。算法
由於,若是這些基礎都不懂的話,看着一道題只能硬着頭皮想個把小時,而後看答案也看不懂,即使你記憶好背下了答案,下次看到一樣的或者變種題,仍是沒有任何思路,十分難受。微信
長此以往,刷題也就沒動力了。因此在去諸如Lintcode等網站刷題前,你至少要先找本書學習這些必要的基礎知識,包括:網絡
1. 常見數據結構:鏈表、樹(如二叉樹)。(是的,鏈表和二叉樹是重點,圖這些能夠先放着)數據結構
2. 常見算法思想:貪婪法、分治法、窮舉法、動態規劃,回溯法。(貪婪、窮舉、分治是基礎,動態規劃有難度,能夠先放着)學習
單純刷題是指一道題我本身能作出來,而且AC,就能夠開始下一道了;或者這道題我不會,但我看了答案,而後本身碼了一遍沒有問題,繼續下一題。優化
真正的刷題必定要追求完美。由於一道題的解法太多了,咱們應該掌握多種解法並尋找最優的解法。也就是說,要考慮時間複雜度和空間複雜度。網站
我作題的時候,看到一道題,可能第一想法就是用很粗糙的方式作,由於不少題能夠採用暴力法解出來,就是時間複雜度很高。以後,我會反思,看看有沒其餘方法來下降時間複雜度或空間複雜度。最後,我會去看一下別人的作法,固然,並非每道題都會這樣執行。code
由於力求給他人看懂,在反思總結的過程當中,會發現以前的想法多是錯的,有時就搞懂了另外一種解法,或者產生新的想法,或者明白各個解法相互之間的聯繫,會比僅僅 AC收穫更多。
算法面試,作出來是一方面,若是可以在這個題目上掌握不一樣時間和空間複雜度的解法,而後再呈現給面試官,面試官天然會更加滿意。
想象一下,你在面試的時候,先寫時間複雜度和空間複雜度最高的方法,面試官頗有可能會問有沒有更優的解法;
你再寫時間和空間複雜度稍微低一點的解法,面試官追問能不能再優化;
你再寫出時間和空間複雜度最優的方法,這時面試官會認爲你是有思考過的,你的思考是有深度的。
若是一開始就寫出最優解,面試官極可能只是以爲你之前作過這道題而已。
什麼叫溫馨區?在刷題的時候,可能有些題型是你比較擅長的,你每次一看就有思路,而後半個小時就擼好代碼,提交代碼AC,哇,又多刷了一道題,開心。
前期你能夠多刷些這種題練手,提高刷題樂趣。但我仍是不建議你一直待在溫馨區,你應該去作一些本身不擅長的題,那種一看到就以爲本身很菜、讓人懼怕的題。
跟有的人建議從hard題開始刷的道理相似,一開始的確會很難受,但慢慢地就知道了一類題的套路,作題時間也會相應縮短,這種成就感不是待在溫馨區能比的。
埋頭搞題海戰術,一我的跟楞頭蒼蠅似的跑,既沒有效率,也沒有結果。擔憂本身作不到:基礎不夠好,刷題進度不理想,尚未一個好的師傅帶。
因此,不建議你孤身埋頭刷題。
更多精彩IT求職乾貨:點擊可閱讀