LeetCode按照怎樣的順序來刷題比較好?
最近迫於要提升自己的演算法水平,方便明年找實習與工作,但是苦於不知道該按照什麼樣的順序才是合理的?
按照下面的tag刷起來挺好的。
舉個例子:比如複習鏈表的內容,就選Linked List這部分的23個題目。
刷完之後可以再總結一下常用的方法和數據結構構造方式。總之不是為了刷題而刷題啊,是為了彌補一部分的知識去做。
希望對題主有幫助。
1、建議未刷過題的新人按著順序來。前 150 題覆蓋了很多經典題目和知識點,指針法類如『3 sum』系列,動規類如『regex matching』,搜索類題目如『Sodoku Solver』。
2、基本熟悉知識點(圖、樹、堆、棧、鏈表、哈希表、記憶搜索、動態規劃、指針法、並查集等)後,可以一類類標籤強攻。Leetcode 右側的標籤系統雖然未必 100% 完整,但是大致分類做得還不錯。
3、面試前的一個月可以只做『Hard』標籤的題目,因為一般兩遍之後對於大部分『Medium』難度以下的題目都是肌肉記憶了。多練習『Hard』類題目可以讓自己的思路更開闊,因為很多題目使用的奇淫巧技讓人驚訝,比如 Leetcode 精心設計連續題號的『84. Largest Rectangle in Histogram』、『85. Maximal Rectangle』。
4、善用收藏夾,要養成『一道題第二次練習尚不能解就加入收藏夾』的習慣,且需要定期清空收藏夾:每道題不需提示下通過兩次後才能移出收藏夾。
5、面試前可以購買會員,按照公司的標籤來練習,也可以結合白板練習。面試前如果時間緊迫,那麼練習的優先順序分別是:即將面試公司的題目、收藏夾里的舊題目、剩餘的新題。
6、衝刺階段的練習請盡量不要打開題型標籤,給自己思考的空間。
7、如果真的刷了三遍以上還沒法達到理想目標,那麼一定是學習方法出了問題,請多總結。
我的方法只適合連數據結構都不紮實的菜雞選手~
不要完全按tag!頭一次刷,先把這五個tag做了:array,string,tree,linkedlist,math,其它的千萬別按tag刷。
這樣不存在前面答案說的思維暗示問題,反而幫助鞏固數據結構,還可以自己歸納某種數據結構的全部技巧~
每個tag內部就按照easy-medium-hard的順序做,這樣最開始一天刷10道easy,後面熟了這個數據結構一天也能刷5道難題,不會一開始就卡殼,搞得自己很鬱悶。
這時候已經100多道了,之後從hard往easy刷!前面虐虐虐,後面一天20道easy爽歪歪,很快就刷完啦!趕快買個會員開始第二遍吧!…我做的時候是從前往後依次刷的
排名最靠前的答案說按tag刷,這樣做其實有個小弊端,就比如你刷greedy or binary search的時候,你一開始就會往這些思路上想,倒不太利於獨立思考。
個人感覺時間充裕的話可以按難度或者順序或隨機刷題,強化某方面演算法知識的時候可以按照tag來。
按照難度從低到高,同一難度按照勝率從高到低刷
不是有個pick one的按鈕 按那個做賊有意思
- 如果想提升自己的思維能力,可以按照AC率由低到高二分查找匹配自己當前水平難度的題目,然後適當挑戰高難度題(二分時間複雜度是O(logn),至少比從易到難的O(n)節省時間)
- 如果想鞏固某一專題,那自然應該按照tag來刷題,但是因為所用的方法在求解前已知,不太利於思維能力的提升
- 如果什麼都不懂,那麼建議隨機刷題,一來可以漲見識,二來進步空間比較大
- 如果想提高AC率或者增加自信,那麼建議刷水題
再有個建議,題目如果太難超過當前自己能力的話,嘗試一定時間後還是老老實實看題解吧,人與人之間還是有天賦差別的,但區別在於經驗可以慢慢積累
我現在是這樣刷的,感覺效果不錯:
1. 在收到公司面試通知後,先刷該公司的題。
2. 相關公司的題目刷的差不多後,根據自己易錯或者思路不清晰的題目類型,在tag中找相關的幾道題查漏補缺,並且進行一些總結。3. 在上述兩條完成之後,或者在即將面試之前,用pick one隨機拿幾道題練練手。按照通過比率,從大往小了刷
推薦 LintCode 的小題庫 - 階梯訓練 ldder。最近在刷的是這個美國大公司的精選題庫。個人非常喜歡,因為幫選擇困難症的我省去了糾結今天做哪道題的時間。http://www.lintcode.com/zh-cn/ladder/ 直接上圖。
這個題庫一共有126道題目,分成10個關口。哈哈,就像打遊戲一樣,要過10關才可以通關。感覺特別符合人的心理需求,每次做完一關,滿滿的成就感有莫有。
個人覺得,如果你是小白,剛剛開始刷題,做一遍這個題庫很有必要。因為這個題庫基本上把常見的演算法題型都覆蓋到了。把這100多道題目做完,基本上對面試要求的演算法知識點,也過了一遍,有了一個大概的了解。但是,你要記住,只刷一遍是不夠的。因為大部分的題,你做第二遍的時候,有可能還是跟第一遍的感覺一樣,完全找不到思路。所以通過第二遍、甚至是第三遍來鞏固刷題效果很有必要。而且,可以提升你的做題速度,幫助你在面試規定的時間內完成題目。
臨近面試的時候,我會建議你根據面試的公司,刷一刷新題。比如到網站上看看面經,這家公司最新的面試題中,有哪些新的題目你沒有做過的。可以想一想,如果會的就跳過,不會的,就記錄下來,花點時間琢磨一下。lintcode上面每次也都會實時更新一些最新的面試題。在「面試真題」專欄,你會看到標註「最新添加」的標記。通過「公司」標籤也可以篩選各個公司的題目。
歡迎跟我一起討論做題思路。
Pick one...
自從LeetCode開始收費之後,我就不刷了,在網上找了很多刷題網站,最後鎖定了Lintcode。就用戶體驗來說,lintcode還是非常適合刷題者的,可以節省大量時間。
就拿刷題順序來說吧,因為我本身水平還不錯,我會從medium的題開始刷,大概刷了一周吧,發現Lintcode里的階梯訓練很不錯,感覺就是為自己量身定做的,基本上IT公司有過的面試題都有了,所以我開始刷裡面的題。我先是按照題目的分類刷了一遍,裡面一共5大類,大概一共400多道題吧,每一道都是精選的題目,至少我覺得刷了沒有白刷,獲益匪淺。這樣大概刷到2月份吧,對了我是從去年11月份開始刷的。因為我3月份想去面試Amazon,所以我開始刷IT公司的題,最棒的是,Lintcode給我總結了9道AmazonOA常見的面試題,簡直就是神來之筆。做完我就去面試了,現在正在等結果,但是我感覺面試的時候我的回答讓面試官很滿意~
所以我的建議是:先按照類目刷,再刷公司面試題,先打基礎後定位。
有人會覺得刷題有點low,但我想說,刷題一點也不low,我覺得刷Lintcode的題目讓我學到了思路,很多題目都是互通的,老師幫你把最典型、最優質的題目列出來不是讓你死記硬背的,而是要融會貫通。
面哪家刷哪家。。。。。只不過得買會員。。。
個人建議,按難度刷,從easy開始刷,感覺會比較有自信,刷完easy會有一點點小小的成就感,對於基礎差的或者說新接觸一門語言的入門者來說非常有效果。我從學習python開始刷,親測有效,彌補了很多基礎的漏洞。
說實話,作為一個弱雞小白,看各種資料只會越來越頭大,關鍵是浪費時間,尤其是時間比較緊迫的時候簡直要抓狂,對於我這種不想花時間篩選信息又想提高命中率的只能靠前輩了額。
前輩說刷LeetCode就可以了,但是收費之後就舉步維艱了,但是LeetCode真的蠻全的,就是題型太多了暴風哭泣,我也知道這種事情沒有捷徑,但是就是經常處於抓不住重點的凌亂狀態。
不過還好現在度過了刷題期,不得不說一些資源和課程還是很有幫助的,為了讓更多更我一樣經歷的人不再重蹈覆轍,希望以下心得分享能幫你們減少黑暗時光哈哈哈哈(其實只有幾個小點點)
1.不要背題,前面的基本題型需要熟悉
2.記模版
3.每道題選擇一個標籤,為了按方法分類
4.建議從 AC Rates 排序的容易開始做起,能有一個良好的開始。
5.oj 這方面還是以 cpp 為主,我使用 python 實現的,有一些演算法基本一樣,cpp 能過而 python 不能過。
當然,無論怎樣還是在自學路上有一百萬種想要放棄的衝動,如果很枯燥的時候去聽聽課也是很棒的。
因為leetcode在北美求職圈非常出名,所以朋友推薦我去他們學校聽蘇涵老師的講座,說是在南加州大學做博士後研究資料庫方向回來的,果然講的很清晰(並且很美,而且很美),重點是真的很重,挑的題型也基本都是我刷完題覺得最主要的那幾種,最最最主要的是我覺得蘇涵老師很會GET到題目在考哪些思維,教的是思考這些題的方法,很多題總是做不對被她一說有深入靈魂的理解了(NND我怎麼沒在刷題前去聽),我在網上找了下,目測只有DC有她的在線課程,可以聽聽看,我簡單看了下介紹應該是和在學校講的重點比較一致的。附上地址吧,畢竟專門講LeetCode鏈表題的老師很少了
https://www.dcxueyuan.com/?slxydc=a63597#/classDetail/classIntroduce/3
Pick one! 好用。
需要找自信就是easy,然後通過率的方式排序如果沒有特別想進的某間公司,就在適合自己的難度按照不同分類的tag來刷吧,在那個難度做到無壓力就做下一個難度。現在好像可以按frequency刷
推薦lintcode。
我覺得按歷史時間從最舊的題開始刷挺好的,最好也別看tag,別看hint。因為分析出問題的類別也是訓練的一部分,面試的時候不會有人給你把問題分類好的吧。
有一個公眾號wowAC,講解常用演算法,並且輔助leetcode練習也有leetcode詳細的題解。樓主可以看看。
如何正確高效地使用LeetCode? - 知乎
https://www.zhihu.com/question/26580300/answer/258403199queue&
while(!que.empty()){ //只要還有問題,就繼續這個循環 question top = que.top(); que.pop();que={ ..... };//先用一些經典問題初始化 vector&
//解決當前的top問題,AC之後會得到與當前問題相似的一些問題; for(auto sim : similars){ if(is_good_question(sim)) que.push(sim); // 遍歷所有相似的問題,並且將點贊數多的好問題加入 que中間; }}similars = solve(top);
推薦閱讀:
※如何計算有多個起終點的最小費用流問題?
※如何理解benders decomposition在混合整數規劃中的應用?
※動態規劃和貪心的本質區別是什麼?