刷leetcode吃力正常嗎?

c++ primer plus過了一遍,今天做了leetcode前幾題,感覺有點吃力,得在草稿上寫的明明白白才能理清思路。聽說leetcode只是很簡單的演算法


leetcode的確是比較「簡單」的演算法,但你得把他放到正確的語境。如果你是一個以acm為目標的選手並且大量刷過poj之類的,那leetcode確實可以說是簡單的,至少不用你去處理數據就省了很大的麻煩。

但如果你一不是科班出身二沒有經過大量演算法練習,比如我,leetcode題不會做絕對不是丟人的事而是再正常不過了。這就和做高數題一樣你沒練過接近的題型很多時候想破腦袋也未必能做出來。而且現在lc的難度越來越高,我現在還會時不時碰到短時間做不出來的medium題(我基本所有題都做過了),你可以想像我第一遍做leetcode的時候是多麼痛苦。當然你可能覺得是我菜,但就我這水平刷400題都能在google match到組,可見做leetcode 如砍瓜切菜一般的人,比如stephan porchman那樣的牲口還是極少數。所以只要你在做題的過程中能感受到自己的提高並且隨著越做越多會的也越來越多就足夠了。

最後,推薦你做每周的contest,這是一個不買會員做加鎖題的方法。

貼張圖,上周contest好不容易碰上簡單題結果開始晚了要不可以進前20的...哎


我剛做Leetcode的時候,一道 easy 都要想半天,現在除了大多數的hard,一般都能通過。。。

大多數的 hard 都是特定領域的問題,如TCP的滑動窗口,編輯距離等。這些如果之前沒有做過, 是很難獨立完成的。我遇到問題的時候一般到 水中的魚 找答案。這個博主是 facebook 的工程的,但有些題目他也沒法立即想到答案或者最優解。所以別太灰心,好好做,會有收穫的。

建議一次只針對一種題型進行訓練,如數組、鏈表、二叉樹、回溯、動態規劃,這樣效果會更好。

上個圖說明我刷得很艱難。。

書籍方面《STL 源碼剖析》 和 《演算法技術手冊》會幫你理解最常見的數據結構,查找和排序演算法。

LeetCode題解

http://blog.csdn.net/linhuanmars/article/details/38468361


leetcode刷的方式很多種

1 看題解刷與不看題解刷

2 最優時間複雜度刷與非最優

3 網頁窗口直接刷與ide刷

等等

新手覺得吃力很正常

對於大牛應該都是水題了吧

.....


如果你刷著毫不費力,刷這個有個屁用呀。


只要認真學過數據結構和演算法,leetcode題真得不難。因為你只是過了一遍C++,沒練過基本的C++數據結構和演算法,當然會感覺什麼都要自己從頭去思考。


計算機科班出身,華為內推(資料庫引擎研發)面試過了,刷leetcode依舊吃力的路過。原因是大學時我沒玩過acm和oj。

不過我這個吃力概念不同,題目我是解得出來並且能通過的,但一般運行時間統計只在前40%,得再思索重構幾次才能到前10%,有的題還得看參考答案才能提上去。


和語言的關係沒有那麼大,編程功底和演算法更重要。我的感覺是,如果沒有做過這方面的訓練,Hard類的題比較難做,Medium和Easy類完全獨立(也就是不看別人的解答)做也會吃力。當然也可能是我的水平太差,讓各位大神見笑了。


leetcode跟語言基本無關。


正常。

其一, 你只是看了一遍《C++ Primer Plus》,而不是三遍或者更多。

第二,LeetCode上很多題目不僅需要一定的語言基礎,畢竟gg,ms的面試題大都是這裡面的,所以需要有數據結構,演算法的基礎,也有很多題目都是考查思維能力。而且這些題目需要你不斷的去優化時間,空間複雜度,而不是簡單的獲得一個Accepted.

建議你可以先擼完鏈表,STL相關的題目,去學數據結構再繼續做吧。


認真的說啊。。。其實做一遍都不夠的。。

因為只做一遍,然後遇到原題還是有可能思路不清晰寫錯被拒啊。。

別問為啥這麼說。。說多都是淚。。。T T。。。


你可以考慮換python刷,然後會覺得hard難度好像也不難。

畢竟一般人再怎麼寫,也沒python的builtin快


這學期演算法課的作業就是leetcode刷題 感覺leetcode 大部分hard可以在一個小時內解出來 沒做過easy和medium 如果題主覺得很困難 不妨先去找一本好的演算法書看看 掌握一套系統的演算法設計思想再來看leetcode就不會困難了

另外 cpp primer 是一本教語言的書 看它不會提高你的演算法能力

推薦幾本演算法書 《演算法概論》《挑戰程序設計競賽》《計算機編程藝術》


一開始,我也覺得難。

後來經朋友推薦用了Python。

刷題如切菜。


單從演算法和數據結構的角度來說,確實很簡單。ACM需要掌握的演算法,或者說演算法導論中介紹的東西,比leetcode上考查到的要多出好幾倍。

leetcode還有一個降低難度的地方在於,它會告訴你掛在了哪個用例上,這樣你就可以針對這些corner case有地放矢地去調代碼。各學校的OJ(我見過的)只告訴你WA了,不知道在什麼地方掛了。

所以,被坑了若干次之後,我通常都要先去discuss看看別人WA或TLE的用例。

並且還要看看show tags,如果有哪個解法我根本就沒想到,還會搜搜水中的魚之類的博客看別人的思路。

寫完代碼,還需要在本地多次調試通過了再交。

結果,AC率還是只有57.9%。

吃力不吃力,還得看怎麼個刷法。

如果不搜博客完全自己琢磨解法、不看discuss和WA掛出來的錯誤用例自己拚命找到更多的corner case、甚至本地不調試直接在窗口寫代碼(我一同學說,面試的時候誰給你那麽多機會去debug,只能一遍寫好,所以靠直接在窗口寫代碼訓練自己),那難度簡直hell級別,吃力是很正常的。

如果像我這樣刷,仍然覺得很吃力。。。那可能確實不太正常。


雖然說刷題吃力是每個人拿Offer的必經之路(大牛可以忽略這句話)。但是仍然有一些技巧和策略可以幫助到你。

我自己平常主要用的是lintcode刷題,但是刷題網站都差不多,所以就以我在lintcode的刷題經驗來談談如何有策略地刷題。

Lintcode 上的題目有三種分類,一個是題目類別,比如」algorithm」」data structure」;一個是難易程度,分別是「easy, medium, hard」;一個是按照公司分類,比如「google」。


當我剛開始刷題時,我會先選一個題目類別,比如「binary tree」,然後選擇「easy」開始刷。當把easy的題目刷完後,我才會開始去刷medium的題目。這樣可以有效避免自己一上手就碰到難題,卡在一道題上浪費時間。先把簡單的題目kill後,再逐步提升難度,這樣也比較容易簡歷自信心。如果我要去面某家公司,我則會按照公司類別來刷題。

另外,我會使用上面的階梯訓練刷題。主要是我比較懶。每次自己篩選題目好麻煩,LintCode上的階梯訓練是已經篩選好的題目。比如有北美IT公司的專題題庫,也有《劍指Offer》的所有題目。可以省去不少時間

最後,我想說的是,凡事都沒有捷徑,刷題也是。只有付出努力,才能真的破繭重生。剛開始刷題肯定比較吃力。但是千萬不要放棄。一定要堅持下去。


難道只有我糾結於怎麽盡量把每道題目刷到beats 100.00% of * submissions 嗎


這個正常,我一般做10題,有5題需要看參考答案,但是對於面試足夠了,狼廠的offer就這麼來的。


不吃力刷它還有啥意義 —_—

再說,leetcode是數據結構和演算法,跟看完CPP primer也沒有關係啊。

唯手熟耳。


難度因每個人背景而不同。

我大學研究生讀的都是非計算機專業,但是偶爾為了保持手感做做leetcode也不覺得太難,八成的題目可以看出正確思路,六成的題目可以直接水過。原因是高中做NOI,大學也打過ACM區域賽。相比於練慣用的OJ,這個難度應該是很友好的。

如果沒有oj經驗,我想吃力應該是很正常的。不過,這種東西多做幾遍就好,會越來越快越來越熟練。基本的演算法訓練並不考驗智力,而是考驗你的練習度。就和數學題一樣,做多了自然會。

而且並不用有什麼心理負擔,一個題庫而已,和POJ,杭電OJ並沒有什麼不同。不會就不會,並不能說明什麼。努力進步才是王道。


leetcode 作為OJ來看 數據並不極限,就目前做過的題來看很多都能以非最優演算法水過。而且似乎很多題目表述不清,要WA了才知道… 想練演算法做其他OJ吧,leetcode話興許面試管用。


推薦閱讀:

TAG:編程 | C | ACM競賽 | Leetcode |