互聯網技術筆試總通不過?leetcode刷對了麼

https://36kr.com/p/5084645git

 

Leetcode,繞都繞不過去的程序員刷題神器

編者按:本文來自逆行求職(ID:nixingjihua)。程序員

對全部求職技術崗位的童鞋來講,有這麼同樣東西恐怕作夢都會夢到【Leetcode】,繞都繞不過去的程序員刷題神器。github

「哲學是世界觀和方法論的統一,是具體科學知識的歸納與總結。」面試

今天,逆行君就帶你從世界觀和方法論兩方面走進「leetcode」算法

leetcode之世界觀

什麼是leetcode編程

簡單來講,leetcode是一個美國的在線編程網站,它收集了各大公司的經典算法面試題,用戶能夠選擇不一樣的語言進行代碼的在線編寫、編譯和調試。數組

Leetcode目前有450題(依稀記得去年還只有340多道啊),分爲三個難度easy、medium、和hard。題目大體分爲兩類:數據結構

一、基礎算法的知識。架構

這些題裏面有大量的算法題,解這些題都是有套路的,不是用遞歸(例如深度優先DFS,廣度優先BFS),就是要用動態規劃(Dynamic Programming),或是拆半查找(Binary Search),或是回溯(Back tracing),或是分治法(Divide and Conquer),還有大量的二叉樹,數組、鏈表、字符串和hash表的操做。經過作這些題能讓你對這些最基礎的算法的思路有很是紮實的瞭解和訓練。app

二、編程題。好比:atoi,strstr,add two num,括號匹配,字符串乘法,通配符匹配,文件路徑簡化,Text Justification,反轉單詞等等,這些題的Edge Case,Corner Case有不少。這些題須要你想清楚了再作,只要你稍有疏忽,就會有幾個case讓你痛不欲生,並且一不當心就會讓你的代碼會寫得又臭又長,沒法閱讀。經過作這些題,能夠很是好的訓練你對各類狀況的考慮,以及你對程序代碼組織的掌控(其實就是其中的狀態變量)。

爲何必定是leetcode

Leetcode是注重算法的刷題工具,在考算法的筆試面試中,遇見原題的機率可算是很是大:

@飛龍:面試向算法,感受沒有比leetcode更合適的訓練方法了。短時間刷用處也很大,若是你對代碼有感受的話,一些巧妙的解法你看一眼就會忘不了。

@anonymity:參加了一些公司的筆試,看到過leetcode上的原題或近似題。最後,從了某公司的美國總部軟件工程師的offer。學生們項目經驗少,只能考算法。刷題頗有用。    

@yuquan wang:

會leetcode,不必定能拿offer

不會leetcode,基本拿不了offer.

leetcode之方法論

簡而言之,就是,leetcode到底要怎麼刷?

刷題的順序,能夠按不一樣的難度等級練習,先把easy的題目練完,再進階medium,最後的hard就量力而爲。廣度優先的練習會讓你快速掌握大部分題型,這樣應對突發的面試筆試需求也能夠信心十足,不會出現尚未練過的地方。

還不錯是否是。

互聯網技術筆試總通不過?leetcode刷對了麼固然,要是按編號刷題太無聊,你也能夠按Tag進行練習,舉個例子,好比複習鏈表的內容,就選Linked List這部分的23個題目,刷完以後能夠再總結一下經常使用的方法和數據結構構造方式。Tag分類在網頁右邊,如圖: 互聯網技術筆試總通不過?leetcode刷對了麼

不過按Tag來刷,也可能會在慣性思惟下,去想關於Tag的算法。好比138. Copy List with Random Pointer(深拷貝鏈表),Tag:Hash Table。儘管是一個hard的題目,可是已經提示hash表,怎麼樣都會想到創建映射關係(並且目前最好的解法並非使用的hash table)。

最後提供一種綜合性思路,也就是在各個Tag分類裏按不一樣的難度刷題,這樣就既有廣度也有深度了。

咱們還想給你一些小技巧

01 善用Github

很多人都會一邊作Leetcode的題目一邊在Github上repo,這樣不只對本身的解題思路有所記錄,還能方便查找。很多刷Leetcode的高手,他們的答案也是寫在本身的Github上,你也能夠經過Github成功找到他們。

02 善用Leetcode的討論區

同一道題的解法每每不止一種,甚至思路和方式都會徹底不一樣,例如這位同窗所說:「邊刷邊感嘆天外有天,好比有道很簡單的一個int array只有一個數只出現了一次,其餘數都是出現了兩次,找出只出現一次的數。看到討論區的答案是把全部element XOR起來,頓時膜拜」 因此通常很簡單的題,也有必要看看討論區的優秀答案,畢竟提高本身的算法水平纔是正義目標啊。

重點,90%同窗都不知道的討論區在的正確打開方式:

從每道題目下方的Discuss按鈕裏點進去,纔是每道題對應的討論!

互聯網技術筆試總通不過?leetcode刷對了麼

03 徒手寫代碼的能

不少同窗在Leetcode上編得風生水起,但在筆試面試中遇到面試官拿出一張A4白紙,可能就懵逼了,改改塗塗半天寫不完整。這個時候徒手寫代碼的能力就尤其突出了,不管你是先手寫完代碼再敲到網頁上,仍是代碼AC(經過)後再默寫一遍,徒手代碼能力都是值得訓練的,這也是你的總體思惟和架構能力的體現。

04 善用碎片時間

有不少同窗因爲實習或者其餘緣由沒有辦法拿出大段時間來刷leetcode,這裏爲實習/工做/研究僧提供一個「一天一題時間表」:

一、早上起來出門前,迅速看一道題。

2.在擁擠的交通工具上,超脫本身,「冥想」題目。

3. 題目so easy,手機提交。

4. 短時不能通關?那就一直放在腦子裏面想,到了公司/實驗室,基本答案就能夠動動手寫在電腦上了。

5. 如前文所說,將思路和解決方案放到github上。

6. 晚上睡覺前,反思一下是否是最優解法,有時間的話看看discuss,沒時間,把本身的解法理順了,涉及的知識點再過一遍腦子。

05  菜鳥小白專用技巧欄目

對於基礎不紮實的菜鳥選手,逆行君並不推薦按照前面提示的難度/tag進行刷題操做,有可能受思惟暗示的影響不說,效率也會比較低下。

第一次刷,首先攻克array,string,tree,linkedlist,math這五個tag,好處在於能夠迅速的在規避思惟暗示的同時,迅速鞏固數據結構的知識,或許還能掌握某種數據結構的小技巧。

每一個tag內部就按照easy-medium-hard的順序作,這樣最開始一天刷10道easy,後面熟了這個數據結構一天也能刷5道難題,不會在初期被挫的刷不下去,培養一種刷題的「爽」感。

這個順序完成以後,你已經完成了25%以上的進度條了,以後翻轉順序,從hard向easy進行刷題,開始會有點小虐,但後面就會效率奇高。刷完第一遍以後,就能夠愉快的進行全tag刷題round 2了~

免費題解在這裏

爲了保證你們的刷題心情,大部分的題目的答案整理及分析,咱們都給準備好了,畫風是這樣:

互聯網技術筆試總通不過?leetcode刷對了麼

更多題解能夠關注逆行求職(id:nixingjihua),回覆leetcode得到。

相關文章
相關標籤/搜索