我接觸 LeetCode 也有五年的時間了盖腿,最初是 2014 年在陳皓的網(wǎng)站上看到了這篇 LEETCODE 編程訓(xùn)練爽待,里面推薦用 LeetCode 的題目來鍛煉自己的算法和編程能力。不過翩腐,LeetCode 的出名當(dāng)然是因為它是一個準(zhǔn)備面試的網(wǎng)站鸟款,里面收錄了很多面試中會遇到的經(jīng)典編程題,也讓越來越多的人登錄茂卦、做題何什。我也是在準(zhǔn)備面試的一段時間里才大量地做了 LeetCode 上的題。LeetCode 比各種 OJ 平臺更加人性化等龙,可以用自己的測試用例測試处渣,在 Wrong Answer 的時候也會告訴你錯在哪個測試輸入伶贰,讓你很容易修正自己的代碼。這些設(shè)計都對那些沒有接觸過編程競賽罐栈、只是想準(zhǔn)備一下面試的同學(xué)非常友好黍衙。
LeetCode 這些年在名氣不斷上漲的同時,題目的數(shù)量也是飛速增加荠诬。陳皓當(dāng)時的博客里還只有 154 題琅翻,而現(xiàn)在(2019 年 12 月),題目數(shù)量已經(jīng)達(dá)到了 1279 道柑贞,是一個非常大的數(shù)字方椎。這樣巨大的題目數(shù)量,讓“刷題”越來越難钧嘶。準(zhǔn)備面試的時間是有限的棠众,除了編程題,還要準(zhǔn)備很多基礎(chǔ)知識有决。原本 200 道題的時候還可以全部刷完闸拿,現(xiàn)在有 1000 道題,基本上沒有時間全過一遍疮薇。那是不是意味著胸墙,現(xiàn)在面試越來越難準(zhǔn)備我注,在面試中遇到刷過的原題的數(shù)量越來越少呢按咒?
其實不然。其實到目前為止但骨,我在 LeetCode 上刷過的題也不過 360 道励七,在全部題目中大約 30% 的比例。我在開始面試的時候只做了一百多道題目奔缠,但這絲毫不影響我在面試中能夠輕松答出大部分編程題掠抬。各位沒有面試經(jīng)歷的同學(xué)們可能以為準(zhǔn)備面試和準(zhǔn)備考試差不多,就是盡量多做題校哎,碰上了就能答上來两波,碰不上就答不上來。但其實完全不是這樣的闷哆,相比于做過多少題腰奋,是否有一個清晰的解題思路其實更重要:
面試中的題目往往會增加各種變種,例如將算法放在現(xiàn)實場景中抱怔,或者是對輸出的內(nèi)容有所變化劣坊。如果只是單純記下了答案,可能會在遇到變種問題時聯(lián)想不到原題屈留,或是在題目有所變化的時候無從下手局冰。
面試其實很注重解題思維的考察测蘑,給面試官講解每一步的思路也很重要。即使最后的代碼沒有完全寫對康二,只要前面的思路是清晰的碳胳,也能獲得比較好的評價。
這些都意味著沫勿,精做比刷題更有效固逗。與其費力地去刷 1000 道題目,不如把 50 道經(jīng)典題吃透摸清藕帜。更進(jìn)一步說烫罩,做 LeetCode 其實不光是為了面試,也是對自己算法和編程能力的鍛煉洽故。你肯定也不希望題目做了一通贝攒,面試結(jié)束沒多久又全忘了。畢竟這也是你職業(yè)發(fā)展中的基本功訓(xùn)練时甚。
這也是我想寫這個“例題精講”系列文章的初衷隘弊,我在做 LeetCode 題目的時候,網(wǎng)上能搜到各種各樣的“題解”荒适,但是鮮有文章能梳理各種題目類型梨熙、比較不同題目之間的異同點。把題目做出來簡單刀诬,更難的是總結(jié)做題的方法咽扇。我在做 LeetCode 題目的時候也總結(jié)了一些自己的筆記,把相似的題目歸類陕壹,把那些讓我看了答案 “Aha!” 眼前一亮的思路記下來质欲。當(dāng)做的題多了,漸漸有很多經(jīng)驗性的東西在我的腦海中糠馆,我希望能把這些東西都總結(jié)出來嘶伟,給后來的人一點啟發(fā)。
以點帶面是我的一個愿景又碌。我希望一次講一個例題九昧,再配上幾道有相似思路的題目。很多題目的解題思路相近毕匀,只要從一個題目中悟出通用的解決方法铸鹰,就可以舉一反三。這也正符合上面所說的“精做比刷題更有效”的觀點期揪。我不希望寫一個 LeetCode 的答案冊掉奄,而是希望幫助陷入刷題苦海的你。
以下是剛開始看這個專欄的你可能會問到的問題。
Q:我該用什么編程語言做 LeetCode 題目姓建?
A:建議使用非常流行而且你熟悉的語言來寫诞仓,一般來說是 Java/Python。從個人角度速兔,我還會推薦 C++ 語言墅拭,后續(xù)的文章中會詳細(xì)寫。
Q:使用 LeetCode (leetcode.com) 還是力扣 (leetcode-cn.com)涣狗?
A:都可以谍婉,也可以同時使用。英文網(wǎng)站上的 Discussion 更豐富镀钓,但中文網(wǎng)站很多題目有官方題解穗熬。如果使用中文網(wǎng)站,一定要將題目描述切換成英文丁溅,否則在筆試/面試中遇到英文題目會非常抓瞎唤蔗。
Q:想刷題又不敢太明目張膽怎么辦?
A:可以使用 VSCode 的 LeetCode 插件窟赏,隱蔽性一流妓柜。
Q:面試的日子臨近,還沒怎么刷題涯穷,怎么辦棍掐?
A:種一棵樹最好的時間是在十年前,其次是現(xiàn)在拷况。