這樣刷題,賊愜意!
大家好,我是周末也沒有閑著的二哥。
之前不是給大家分享了一份 Java 版的 LeetCode 刷題筆記嘛,很多小伙伴留言說剛好需要,對我這種大公無私的分享精神表示敬佩(噓。
但由于時間比較緊張,PDF 版里只包含了前 50 道,所以我感覺還欠大家 250 道。所以趁著這個周末,靠著驚人的毅力,我又整理了 50 道 Java 版,從 51 道到 100 道。整理完的那一刻,真的是對天長嘯, 捶胸頓足,終于舒了一口氣,終于松了一口氣??蓱z我的右手食指,因為點擊鼠標(biāo)左鍵過于頻繁,似乎有點隱隱作痛,太難了。
由于要窩在家里整理這份 PDF,周末就沒有時間陪女兒和老婆出去玩,她們倆去隋唐植物園玩了,把我一個人扔在家里,好殘忍?。。鑶鑶?/p>
說實話,洛陽今天的天氣真不錯,雖然不能陪老婆和女兒出去賞牡丹呼吸新鮮空氣,但想到這份刷題筆記會幫助到不少的小伙伴,我心里就好像盛開了一園子的牡丹一樣,姹紫嫣紅!
我認(rèn)識一個 ACM 成績特別優(yōu)異的大佬,LeetCode 對他來說就是小試牛刀;我甚至認(rèn)識一個天賦極強,上來就 beat 100% 的大神。
但我認(rèn)識更多的是,一開始刷 LeetCode 極其吃力,有一種勞資為什么這么愚鈍,刷了不到 10 題就想放棄,心里琢磨著“刷 LeetCode 有用嗎”的普通人,包括 me 在內(nèi)。
真的有必要刷題嗎?
必要肯定是必要的,畢竟“工廠”就喜歡這一套篩選機制,尤其是大廠!這就和古代的很多才子,都特么不喜歡八股文,寫點風(fēng)雅的詩詞它不香嗎?但能怎么辦?想要參加科舉出人頭地,就得這么干!
那怎么刷才能輕松點,才能高效點呢?
我的心得就是簡單粗暴:從易到難,一遍一遍地刷,盡量使用自己熟悉的編程語言,比如說 Java 程序員盡量用 Java 來解題,這樣刷題的幸福感也會提升很大一截。用自己不熟悉的語言可以刷,但時間成本就很高。就這樣不斷地堅持,刷完 10 道題,然后 50 道,100 道,刷題的功夫就有了本質(zhì)上的提升。

當(dāng)然了,刷題仍然是需要有技巧的,不能悶著頭吭哧吭哧地刷,可能會遇到很多阻礙。
1)如果不是天賦異稟,不要怕,一開始就是抄題,先把別人的解題思路照著敲出來,比如說大家可以使用我分享的這份純 Java 版的 LeetCode 刷題筆記,前后有 300 道,幾乎每道都有多種解題思路。
反正我一開始學(xué) Java 的時候就是各種抄 demo,demo 抄得多了,大腦對代碼產(chǎn)生記憶了,再去看視頻、書籍學(xué)習(xí)就會感覺輕松得多!
刷 LeetCode 也是這么個理,不要覺得不好意思,抄多了,思路就慢慢有了。雖然是個笨方法,但管用。
2)刷的題多了,盡量控制一下刷題的時間,掐個點,不能讓自己一直想、一直寫下去,如果半個小時沒有解出來,就果斷放棄,去背別人的答案,不要覺得不好意思,等到真的熟了,再去想自己的解題思路。
在我們小的時候,學(xué)習(xí)就是靠背,拼音要背,乘法口訣要背,一樣的道理,背的滾瓜爛熟,才能在應(yīng)用的時候第一時間就想得到。甚至說,就省去了想的時間。
想一下,是不是這樣,當(dāng)我們背會了 1+1=2 后,要得出 10+10=20 是不是就容易多了!
3)代碼盡量要規(guī)范一點,不要以為只要把題解出來就行了,還是應(yīng)該保證代碼優(yōu)雅的姿態(tài)。
4)參加筆試之前,一定要保持手感,不能說題解過了就以為自己真的會了,時間長了是會忘記的。
5)一開始刷題不要追求量,非要把所有的題全部刷完,光 LeetCode 上就有 1000 多道題,所以沒必要全部刷完的。可以按照下面這個類型來刷就可以了。
數(shù)組-> 鏈表-> 哈希表->字符串->棧->隊列->樹->回溯->貪心->動態(tài)規(guī)劃->圖
一開始,刷 100 道題就差不多了。國內(nèi)的刷題網(wǎng)站有 LeetCode、LintCode、牛客網(wǎng),大部分題都是類似的,有部分題需要充錢才能解鎖,可以理解,畢竟網(wǎng)站也需要商業(yè)化才能長期維護和發(fā)展。
我在知乎上發(fā)現(xiàn)了一位匿名用戶整理的 100 道面試高頻算法題(出自 LintCode,涉及到阿里巴巴、字節(jié)跳動、騰訊、百度、美團、Google、Facebook、Microsoft 等大廠,題目類型有二叉樹、哈希表、二分法、寬度優(yōu)先搜索、深度優(yōu)先搜索、貪心),地址我貼到了原文鏈接,大家可以點擊去查看。我把有題解的題目列一下(括號中為題號)。
1、連接字符串(876)
2、同和分割數(shù)組(877)
3、有效的括號字符串(1089)
4、路徑和 IV(1098)
5、數(shù)組評分(1168)
6、刪除字符(244)
7、矩陣中的最長遞增路徑(305)
8、組合新數(shù)字(1341)
9、最大點的集合(1356)
10、最短休息日( 267)
11、中位數(shù)( 339)
12、移除箱子( 1180)
13、最小分解( 871)
14、等差切片( 982)
15、祖瑪游戲(1211)
16、生命游戲( 1301)
17、字符至少出現(xiàn)K次的最長子串(1261)
18、整數(shù)替換(1259)
19、拆分子數(shù)組(1251)
20、考試策略(273)
21、字符串劃分(328)
22、區(qū)間極值異或(346)
23、月份天數(shù)(1141)
24、關(guān)聯(lián)查詢(1145)
25、第k大元素(5)
26、LRU緩存策略(134)
27、圖是否是樹(178)
28、序列重構(gòu)(605)
29、單詞拆分(107)
30、最多有k個不同字符的最長子字符串( 386)
31、三數(shù)之和(57)
32、顏色分類(148)
33、單詞接龍(120)
34、驗證二叉查找樹(95)
35、搜索旋轉(zhuǎn)排序數(shù)組(62)
36、買賣股票的最佳時機(149)
37、滑動窗口的最大值(362)
38、二叉樹的鋸齒形層次遍歷(71)
39、兩個鏈表的交叉(380)
40、復(fù)制帶隨機指針的鏈表(105)
41、二叉樹的后序遍歷(362)
42、二叉樹的所有路徑(480)
43、根據(jù)前序和后序遍歷構(gòu)造二叉樹(1593)
44、對稱樹(1360)
45、找出樹中每行的最大值(1195)
46、尋找重復(fù)的子樹(1108)
47、兩數(shù)之和(56)
48、最長回文串(627)
49、兩數(shù)組的交集(547)
50、數(shù)據(jù)流中第一個唯一的數(shù)字( 685)
51、兩數(shù)和 II-輸入已排序的數(shù)組(608)
52、經(jīng)典二分查找問題(457)
53、搜索旋轉(zhuǎn)排序數(shù)組(62)
54、尋找峰值(75)
55、最長上升子序列(76)
56、島嶼的個數(shù)(433)
57、序列重構(gòu)(605)
58、拓?fù)渑判颍?27)
59、課程表(615)
60、最大子數(shù)組差(45)
61、子集(17)
62、子數(shù)組之和(138)
63、電話號碼的字母組合(425)
64、k數(shù)和 II(90)
65、因式分解(652)
66、會議室 II(919)
67、俄羅斯套娃信封(602)
68、最大乘積(304)
69、加油站(187)
題是刷不完的,不一定非要刷 300 道題,1000 道題才能找到工作,畢竟這事還涉及到運氣,如果面試官恰好問到的題都是你解過很多遍,倒背如流的,那么恭喜你,上岸幾乎是板上釘釘?shù)氖隆.?dāng)然了,面試過程中,也不是必須每道題都 必須答對,才能拿到 offer,有一些是看面試官對你的好感足不足。
刷的題多了,自信心就上來了,面試的過程中也就不會怵得慌。
刷題除了有助于我們豐富思維方式之外,還有助于鍛煉編碼的基本功底,希望這些技巧能幫助到大家,希望我辛辛苦苦整理的這份 Java 版的 LeetCode 刷題筆記能幫助到大家。
大部分小伙伴應(yīng)該都還處在大學(xué)階段,很有必要趁早把題刷起來。一開始可能會比較難,千萬別灰心,好好做,會有收獲的。
我是手指頭疼的二哥,嗚嗚嗚
記得給二哥加個星標(biāo)哈,我們下期見~
