刷完了leetcode,接下來刷哪個網站比較好呢?

我水平很一般,同學說leetcode最簡單,所以過去一個月就在刷leetcode,我發現有很多這樣的網站,還有geeksforgeeks, hackranker, codeforece, bestcoder,sgu等等. 我想知道哪個網站比較適合。最好能告訴test case的,否則很難debug 0 0

更新下信息. 最近拿到了snapchat, Google, Microsoft等offer......輪子的回答真是坑爹啊


如果你的主要目標不是去搞ACM/ICPC的,也不想去搞科研的,適可而止

所以這裡迅速劃掉:CodeForces、BestCoder、SGU

你以後真不見得會在工作中去用線段樹與樹狀數組、樹鏈剖分與動態樹、樹套樹等等可以划到高級數據結構範疇的東西的,這些留給專業選手們、計算機科學家吧

上面這幾個你倒是可以考慮一下做以下兩方面的題目:

1、最水的題。這種題目做起來會莫名其妙卡殼的,多練練,練到有快速反應能力足以應付面試即可

2、動態規劃類題目

HackerRank,看需要做需要的分類的題目,都搞透是沒那麼多精力的

還有一些說一下:

TopCoder:分Design、Develop、Algorithm的。Algorithm大約是黃名水平應該也就夠了,畢竟div2的2個暴力+1個規劃類,div1第一個一般也是dp這種

浙大 Programming Ability Test(PAT)練習題庫:題目集列表 | Programming Ability Test

根據負責人陳越姥姥的說法,PAT現在3個等級的話,水平如下:(具體要求可參見 查看新聞 | Programming Ability Test)

Basic(乙級):熟悉C語言就能高分

Advanced(甲級):大學的數據結構課程熟悉且有較好理解就能拿高分

Top(頂級):ACM/ICPC銀牌及以上實力水平

聽說以後浙大計算機考研機試就PAT甲級了,題主看著辦吧……

反正,為了找工作刷題說白了就是一種騙過面試的抱佛腳,然後後面開發的東西才是企業看中的實力,這個還是建議答主多積累一點大項目經驗吧。

還有,答主不要因為在上交身邊是一群高中就搞過NOIP/NOI的大神選手就盲目跟風怒刷那些題了,這些題你現在狂補也不一定刷的過人家,人家起步早的不是一點半點(我才不會說寧波、餘姚那邊小學高年級就開始學信息學競賽了,六年級會DP你去和人家玩?),選擇一個細分方向上好好搞還是能搞出名堂的。


不太贊同前兩名的回答。

個人本科期間一直在搞acm,雖然搞了四年,雖然到最後只是銀牌,但我仍然覺得這段經歷給我很大收穫。

1.找工作

個人本科時面百度,阿里實習,都過了,面試主要以演算法為主,而且我身邊的搞acm的學長最後也都找到很好的工作,有個學長還去了google,他們的面經都說面試基本都是演算法,工程問題很少,而且我也沒聽說這些學長試用期被幹掉了。

2.代碼能力

可能題主寫的代碼還比較少吧,我覺得學演算法,刷題很能鍛煉代碼能力的, 而且評測系統能告訴你你寫的代碼是否正確,這可以讓你對自己的代碼有一個較為客觀的看待,而做項目基本就達不到這種程度了吧。對於做項目,我經驗不多,本人現在在讀研,也做過一些,主要是寫網站,架構是python-django-nginx-mysql,做網站給我的感覺主要就是寫幾個前台頁面然後在後台操作一下資料庫,調用api,做過一個網站之後,再做網站,基本都是一個模子,感覺在各種重複。

3.感覺演算法很美

這句話說的好像挺煽情,但事實確實這樣,我每學一個演算法,都會為其高效性和優美性而驚嘆:

「真是太TM叼了,竟然還能這樣搞!!!」。到現在我也有時候還會刷題,還依然覺得很爽。

我主要在codeforces刷,偶爾也上hankerrank,感覺codeforces的難度區分梯度比較好,建議題主可以按照題目難度刷。


刷 github 做項目,否則遲早入邪道。


前面的幾個答案,把刷題和正事稍有區分。難道刷題沒有意義?難道刷題不是正事?

我想前面幾位答主本意也並非如此,只是從題主的問題來看,題主似乎只是為了刷題而刷題。貌似刷完題就已然武功大成,就已然能夠拿到offer了。題主可想清楚刷題的意義何在?

題主之前刷的是Leetcode,那麼我就說說我對刷leetcode的看法吧。Leetcode上有些題目是一些喜歡面試演算法公司所喜歡用到的題目,我做這些題目是為了鍛煉自己的基礎演算法知識。因為發現自己寫代碼的時候很少會想到用**演算法,導致有些時候,程序寫的很冗餘、難看。於是乎,就開始刷leetcode鞏固訓練基礎演算法知識,之前我幾乎不會用到動態規劃來解決問題,現在在DP方面倒是有些解決問題的思路。所以你看,你應該清楚刷題的意義、其訓練目標在哪裡,就如前兩位所說。


你看,你刷完了leetcode寫程序還是不行。。。說明刷題和寫程序是兩回事你們怎麼都還不明白呢。。。

做點正經事吧


刷題,是在你已經很牛逼的情況下,用來降低面試的時候不小心傻逼的概率的。像你這樣的,就算被你刷過了面試,還不是試用期要被幹掉。所以還是干正事吧。


強烈推薦topcoder,除了srm外再找個刷。


看了一下15年國內互聯網公司的題,只有一部分是演算法,另外一部分是OS、網路,還有邏輯學什麼的。只刷演算法真的容易跑偏。

我的意思是全面發展。當然你能拿一部分的分總比不拿好。

http://wk.baidu.com/mobile/webapp/wkpgcbgcview?type=bgcorg_name=nowcoderre=1


接下來就刷知乎就好了


一個月就全刷完了?我還打算一天一個刷半年呢


刷完了只是第一步。任意抽一道題,你要保證有清晰的思路,能在較短的時間內寫出基本一次AC的clean code。PS:最好到網上搜搜看看別人的實現有沒有更巧妙的,更簡潔的。簡潔很重要。


自己出數據也是一種需要鍛煉的能力


Leedcode用過一小段時間,刷題的話題量還是可以的,不過更建議使用lintcode,lintcode更適合用來鞏固演算法知識和數據結構,而且真心認為lintcode裡面有很多非常棒的原創題!另外,lintcode裡面分類做的要比leetcode好得多,更適合針對性的強化訓練。所以在刷完一部分Leecode之後,我就「棄暗投明」了~
lintcode 裡面還有根據難度進行分類的功能,把這個功能和題目分類的功能結合起來用簡直強大,題主好好利用可以非常大的提升刷題的效率。之前刷leetcode 的時候就是不太能搞得清楚自己的定位,刷題的時候比較迷茫,後來用lintcode這兩個功能進行結合就比較方便知道自己在不同題型上的定位,是屬於簡單、中等、難哪個層次的,然後在這個基礎上有針對性的進行刷題,效率會變得高上非常多,而實時知道刷的題目對應的是哪個檔次的難度,刷題的過程也會變的和打怪升級一樣,興趣大了很多。順著題型和難易程度來的,後來效率上去一天題量翻上幾翻還是很簡單的。
另外建議題主不管用哪個刷題軟體,刷完之後還是都要好好研究下參考答案,這是一個很快提高自己代碼水平的方法。要知道參考答案和我們自己的代碼差距還是很大的。有時候我們代碼寫得慢,想的不清楚,很有可能就是在寫代碼過程中的邏輯沒徹底弄清楚。研究參考答案絕對是一個很快的途徑進行自我提升。每次寫完題目我都會好好的研究研究參考答案。這樣做對提高自己的代碼能力親測十分有效。現在明顯能感覺到自己的代碼已經越寫越簡練了。這裡安利一個我非常喜歡的參考網站:LeetCode / LintCode 答案查詢。
裡面的答案非常全,不管你刷的是leedcode 還是lintcode都可以在裡面找到參考答案,非常適合刷題黨。
還有,每次研究完參考答案如果有什麼新的啟示新的頓悟也一定要好好記下來,這樣以後回顧起來就可以迅速抓到重點。這裡就要點贊一下lintcode裡面的筆記本功能,因為就在lintcode裡面,用起來特別方便,省了很多因為紙質筆記本忘記攜帶丟失等一系列雖然小但是很頭疼的問題。丟筆記本真的是一件很頭疼的事情,我剛開始刷的時候還是傻傻的把一些心得記在自己的小本子上,但有一次在圖書館刷題的時候被師兄連環奪命call匆忙離開了,第二天就找不到筆記本了,天知道我又花了多少時間重新整理了一遍!從此和紙質筆記本say goodbye...
最重要的一點是刷題過程中一定要時不時的回頭對以前刷過的題目獲得的頓悟進行總結和回顧,這樣才能保證你不會邊刷邊忘,保證刷題的效率,不會出現那種刷了一遍和沒刷一個樣的悲傷情況。這樣才能保證刷完一遍確實能起到期望的效果。


刷工程,刷項目,而不是刷題。

把一個想法、一個項目完完整整實現了,就牛逼了。


始終覺得軟體開發(不管是前端,後端,移動端)是一個「工程」,一個整體。不是學會語言,學會演算法的事情。當然不否認語言演算法是重要的


怎麼說呢,能沉下心,老老實實把leetcode每道題目背後的演算法吃透的人都不多吧,所以也沒有必要噴leetcode無用。


leetcode刷完足夠應付國內互聯網公司了!


刷完leetcode刷kaggle


找實習


題目不用刷那麼難的。Leetcode搞完,面試基本就沒問題了。可以考慮做做項目。


推薦閱讀:

計算機快速計算2^N是如何實現的?
迪傑斯特拉演算法(Dijkstra)的本質是貪心還是動態規劃?
對於各進位之間的轉換有什麼好方法嗎?
作為一個低級碼農,該怎樣跳到一個演算法崗位?
UUID是如何保證唯一性的?

TAG:演算法 | 計算機科學 | 數據結構 | 演算法與數據結構 |