iT邦幫忙

2022 iThome 鐵人賽

DAY 11
3

筆者稍微簡介一下Leetcode contest:

大家都知道leetcode每週都不斷推出新的題目
除了那些premium only的題目
大部分就是會先用Leetcode Contest的方式先放出來讓大家比賽
比賽完的瞬間就會跑到最新的題目區然後解答區也會開放po文
題目通常是Easyx1 + Mediumx2 + Hardx1
這四題要在1h30m內寫完

比賽比的是誰寫完的題目比較多(越難的題目分數越高 通常好像是3/4/5/6)
分數一樣多的時候比的是寫的時間
然後compile沒過,crash / WA(答案錯誤)或是TLE(執行時超時)/MLE(記憶體用量超過限制)
submit的時候每發生一次在時間的成績旁邊上會有一隻小蟲蟲
總共的時間會被懲罰5分鐘
會有一個即時(大概30秒sync一次的)的排行榜可以看目前和最後的名次
然後最重要的是每個有參加leetcode contest的帳號
跟所有線上遊戲的elo系統都蠻像的會有一個天梯分數排名
每個人的都是從1600開始
如果比完賽之後和你名次相近的人的leetcode rating都比你高
那這次的比賽就會讓你的分數上升 反之下降(大概比賽後四五天才會update結果)


筆者非常鼓勵所有以面試為目標在刷題的人
無論程度如何都乖乖去參加leetcode contest
不管你是寫了1000題+早就快完爆leetcode
還是寫了500題已經差不多準備要面試
還是寫169題寫到一半的新手
甚至只寫10題以內
也都不用擔心自己還太菜
(不需要把目標放得太高也不用太緊張,只要當作每個禮拜的驗收
沒表現好可能只是某個topic還沒練過或是忘記)
每週日早上10:30準時比Leetcode周賽/週六晚上10:30雙周賽
(如果下定決心要刷題面試但是禮拜天早上又沒毅力起床是不是有點說不過去)

如果讀者是超級超級新手
可以以寫出第一題為目標
第二題就看看題目看得懂就好

如果是正在寫169題的
以寫完第一題和第二題為目標,第三題有寫出來算賺到,
第四題看完解答拿去考公司煩人的同事

其他要面試準備的差不多的盡量以40分鐘寫完前三題為目標
第四題有時候很簡單也要把握
(有時候真的會出蠻難的就不要太糾結,因為面試也不太可能考這種難度的)

參加LC contest,除了可以拿到自己的LC rating更了解自己的實力在哪
筆者不斷強調
持續地獲得成就感以建立動機正回饋迴路也是刷題之路非常重要的一環

每周的及時排行榜(可以看到台灣國旗的人有誰)
也可以刺激你讓你知道你的面試競爭者可能是誰
也會看到有多少人已經默默參加過超級多的比賽 努力程度不知道多過自己多少倍
也可以看到每次台灣成績前100的id,查一查發現大部分都是G社員工,就更有動力刷題

筆者第一次刷題準備面試的四個月只有純刷題不比賽
(不知道比賽可以帶來那麼大的收穫而且覺得早起有點麻煩)
後來第二次刷題準備面試的四個月每場比賽都有參加
不僅心態上會更能激勵自己
而且Leetcode contest對面試的訓練效果非常卓越
每次的題目一定都是陌生的題目
"尤其适合那种做不出来就会分分钟想看答案的小伙伴。。因为全网沒有答案只能老老实实自己码"
(來自知乎的留言)
加上內建的時間壓力模擬環境
不像mock interview有時候考的題目會選到自己寫過的或是難易度難以掌握
或是開始跟partner閒聊之類的,比較沒有擬真的時間壓力

還有天梯系統是非常好的自我程度衡量根據
如果沒有比賽很容易不知道自己實力在哪
很可能看題數覺得自己已經疲乏了開始自我欺騙
覺得寫500多題了好像可以去面試了
但其實還有很多topic不太熟悉或是某些題型已經忘光
白白浪費了一次面試機會

總之每個禮拜最多多花1h30m或3h
但所帶來的效益遠遠大於拿這些時間再去刷三四題
(比賽的時候本來就也一樣是刷三四題...)

每周都有讓自己進步的動力在
百利而無一害!


以下是leetcode比賽前的一些小知識

(也是看官神在他某個影片分享的)
所有leetcode的題目的時間限制大概都是1000ms左右
然後看測資數量級就可以大致上猜到這題要考你的演算法複雜度
基本上就是乘起來大概在10^7的這個數量級左右才是不會TLE的解

如果看到題目的n:

10~20 -> O(2^n) or O(n!) bitmask演算法is ok
100~200 -> O(n^3)
1000~2000 -> O(n^2)
10^5~10^6 -> O(kn) or O(nlogn)
10^8~10^9+ -> O(logn)

所以如果你一開始看到題目發現自己想的演算法複雜度代進去超過5x10^7的話
就一定是有哪裡可以化簡沒有想清楚的地方
通常建議換個方向想 或是不怕被WA懲罰的話也可以先寫出來submit
確定大部分測資都對了再慢慢看哪裡是可以改進複雜度的

附上一些我當初一開始參加比賽的時候犯的錯讓大家不要重蹈覆徹

  1. 比賽的時候按run testcase就算答案不對 finished還是綠色的...要小心(要自己對答案)
  2. 不要不對答案就submit,至少跑跑example case
  3. 比賽有些時候最後幾個測資會是Hidden case... 沒過也不給你case...
  4. WA就不要再去點那個detail了什麼detail都不會跟你說回到上一頁testcase還會不見...
  5. 筆者有一次第一次用python print答案看起來答案都對了結果發現function只有print沒有return...
  6. code裡面每個int都換成long long了
    結果發現 accumulate(v.begin(), v.end(), 0) 會吃int的overflow QQ 要用0UL才行

祝各位讀者爬梯愉快~


上一篇
思而不學則殆 站在大神的肩膀上
下一篇
你可能不知道的 Leetcode 小知識
系列文
0到100的軟體工程師面試之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言