網際網路技術筆試總通不過?leetcode刷對了麼

2021-01-11 36kr

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

對所有求職技術崗位的童鞋來說,有這麼一樣東西恐怕做夢都會夢到【Leetcode】,繞都繞不過去的程式設計師刷題神器。

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

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

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

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

1、基礎算法的知識。

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

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

Leetcode是注重算法的刷題工具,在考算法的筆試面試中,碰見原題的概率可算是非常大:

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

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

@yuquan wang:

會leetcode,不一定能拿offer

不會leetcode,基本拿不了offer.

leetcode之方法論

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

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

還不錯是不是。

當然,要是按編號刷題太無聊,你也可以按Tag進行練習,舉個例子,比如複習鍊表的內容,就選Linked List這部分的23個題目,刷完之後可以再總結一下常用的方法和數據結構構造方式。Tag分類在網頁右邊,如圖:

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

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

我們還想給你一些小技巧

01 善用Github

不少人都會一邊做Leetcode的題目一邊在Github上repo,這樣不僅對自己的解題思路有所記錄,還能方便查找。不少刷Leetcode的高手,他們的答案也是寫在自己的Github上,你也可以通過Github成功找到他們。

同一道題的解法往往不止一種,甚至思路和方式都會完全不同,例如這位同學所說:「邊刷邊感嘆天外有天,比如有道很簡單的一個int array只有一個數隻出現了一次,其他數都是出現了兩次,找出只出現一次的數。看到討論區的答案是把所有element XOR起來,頓時膜拜」 所以一般很簡單的題,也有必要看看討論區的優秀答案,畢竟提升自己的算法水平才是正義目標啊。

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

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

03 徒手寫代碼的能

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

有很多同學由於實習或者其他原因沒有辦法拿出大段時間來刷leetcode,這裡為實習/工作/研究僧提供一個「一天一題時間表」:

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

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

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

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

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

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

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

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

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

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

免費題解在這裡

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

更多題解可以關注逆行求職(id:nixingjihua),回復leetcode獲得。

相關焦點

  • 刷了幾千道算法題,我私藏的刷題網站都在這裡了
    0x00 收割 offer 版不管是找工作筆試面試白板試進大廠,還是研究生參加初試複試機試,數據結構和算法都是繞不過去的坎,刷題就成了很多人的需求,快來看看下面這些網站,變身刷題機器,收割 offer 吧!
  • 網際網路公司最常見的面試算法題大集合
    來源:Github編輯:元子【新智元導讀】LeetCode是一個美國的在線編程網站,收集了各個大廠的筆試面試題
  • LeetCode刷題第三周【數組(簡單)】
    參考資料[1]Leetcode網站: https://leetcode-cn.com/[2]以上文字描述均來自 LeetCode數組模塊: https://leetcode-cn.com/tag/array/[3]刷題請點擊或見附錄:1539.
  • 筆試 | 字節跳動 最優連續子序列
    字節跳動08.09筆試:最優連續子序列給定一個長度為n的整數序列類似題https://leetcode.com/problems/maximum-subarray/https://leetcode.com/problems/maximum-product-subarray/https://leetcode.com/problems/longest-turbulent-subarray/附上最大子段和代碼,聊表敬意
  • 怒刷leetcode...
    心態放平,好好刷leetcode,好offer總在不遠處。   計算機視覺畢業後找不到工作怎麼辦?   AI專業畢業後是不是找不到工作?近日,有知乎網友提問,獲得了70萬閱讀量。 所以現在招人也聰明了,上來就leetcode甩臉,medium,hard整起來。所以我覺得你如果還想找到比較好的崗位,就先把leetcode刷出來。   同樣,一家開發公司的員工@Jarvix在下面實名怒答:
  • Leetcode刷題No.234
    https://leetcode-cn.com/problems/palindrome-linked-list
  • 小張刷題計劃
    原題為了提高自己的代碼能力,小張制定了 LeetCode 刷題計劃,他選中了 LeetCode 題庫中的 n 道題,編號從 0 到 n-1,並計劃在 m 天內按照題目編號順序刷完所有的題目(注意,小張不能用多天完成同一題)。在小張刷題計劃中,小張需要用 time[i] 的時間完成編號 i 的題目。
  • LeetCode數組類知識點&題型總結
    leetcode第一題就是two-sum,對於這類題目,首先看題目要求的時間複雜度和空間複雜度是什麼,其次看有沒有限制條件,如要求不能有重複的子數組或者要求按照升序/降序排列等。1.按start排序2.在前一個區間的end和後一個區間的start找交集例題:252 meeting room[easy](https://leetcode.com/problems/meeting-rooms/)題目理解:給定一個數組,包含每個會議的開始時間和結束時間[[s1,e1],[s2,e2],...]
  • 通關LeetCode刷題完整攻略,省時又高效
    Pattern: Merge Intervals,區間合併類型區間合併模式是一個用來處理有區間重疊的很高效的技術。在設計到區間的很多問題中,通常咱們需要要麼判斷是否有重疊,要麼合併區間,如果他們重疊的話。
  • [LeetCode] 912. Sort an Array 數組排序
    [1,2,3,5]Example 2:Input: [5,1,1,2,0,0]Output: [0,0,1,1,2,5]Note:1<=A.length<=10000-50000<=A[i]<=50000這道題讓我們給數組排序,在平時刷其他題的時候
  • 五分鐘學編程:怎樣才能學好筆試面試最愛考察的算法
    第二次認識算法,還是在研究生期間找實習工作的時候,面試的時候總有一些關於算法知識的考察,這些算法題比之前自己學數據結構的時候要更難一些,比如要讓你描述一下快排的過程,或者是二分查找的過程,由於是電話面試居多,一般都不會考察太複雜的問題。第三次認識算法,是在面試了頭條這類對算法要求極高的公司之後。
  • 每天一道leetcode234-回文鍊表
    正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2」前言 2018.11.6號打卡明天的題目:https://leetcode-cn.com/problems/remove-linked-list-elements/以後明天的題目提取公布一下哈,因為有些朋友想提前做一下~題目 leetcode234-回文鍊表中文連結:https
  • EC營客通:讓網際網路思維落地
    說到這裡,筆者想到了一款最近被眾多中小企業正在使用的軟體EC營客通,其各方面的功能正好實現了網際網路思維的落地,是騰訊旗下的一款企業級網際網路產品。下面我們就來看看EC營客通是如何幫助企業實現網際網路思維的落地。
  • 每天一道leetcode56-合併區間
    正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2」前言 2018.11.13號打卡明天的題目:https://leetcode-cn.com/problems/minimum-path-sum/descrip題目 每天一道leetcode56
  • 黑潮之上初始號要刷麼 初始號刷什麼角色好
    黑潮之上初始號要刷麼,初始號有刷的必要麼,前期誰厲害,要用初始號刷,本次我們就一起來了解一下相關的內容吧。 初始號刷取價值: 先和大家說一下黑潮之上刷初始號的價值是非常低的,而且並沒有很多遊戲中所謂的人權角色
  • 8個程式設計師常用的刷題網站,第一個你絕對用過!
    作者 | JackTian 來源 | 傑哥的IT之旅 好久沒跟大家分享實用工具了,今天給大家分享一些程式設計師常用的刷題網站
  • Go 刷 leetcode|一道簡單難度卻讓我陷入沉思的題目
    來源:力扣(LeetCode)連結:https://leetcode-cn.com/problems/maximum-subarray著作權歸領扣網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
  • LeetCode刷題:Array系列之Remove Element
    參考來自於:https://github.com/soulmachine/leetcoderemove MSDN介紹remove 博客參考distance MSDN介紹3.1 remove()3.1.1 語法template<class ForwardIterator, class T>ForwardIterator remove(ForwardIterator
  • LeetCode145|數組中數字出現的次數II
    .get() .getKey(); }}5,總結一下對於本題,整體最容易理解的思路就是基於鍵值對集合hashmap進行解決了歷史文章目錄數據結構:王同學下半年曾寫過的JDK集合源碼分析文章匯總算法匯總:leetcode