leetcode可以說是工程師的試煉場,收集了許多公司的面試考題,可說是題海無涯,那麼就開始刷題之旅吧! leetcode可以直接用github帳號登入,不用另外申請帳號,非常方便。
選擇選單列的Problems就可以看到題目列表了!
leetcode很貼心依照題型做分類,這邊選擇expand可以看到更多分類。
如果想練習特定類型的題目,可以直接點選該分類,就會看到所有相關的題目囉!像是雙指針Two Pointers
不過如果你沒有想練的特定類型的題目也沒關係,下面的題目列表可以做初步的篩選,一開始先篩選出easy的題目來練習吧! 不過如果你天生神力,直接挑戰medium難度以上的題目也是沒問題的!Acceptance是題目的通過率,越低代表通過的人越少。
右邊會有個小小面板紀錄你的刷題情形,提醒你"題海無涯"。
讓我們直接選一題來開始解題吧!,畫面的左邊是題目敘述,看完敘述如果有看沒有懂,可以搭配example來理解題目要表達的意思。
右邊則是解題區域,可以選擇自己熟悉的程式語言來解題
作答完之後,可以按右下角的Run Code來看第一次test case看有沒有通過,如果有通過,覺得自己寫的差不多了,就可以按下Submit了。
按下Run code後 執行一次test case
這時候題目就會開始跑很多test case,以下面那題的例子來說,有1032個test case,如果有些edge case沒考慮到的話,你的程式碼可能就爆掉了,不會通過測試,接著就會看到下面這樣的訊息,輸入-123 預期要輸出-321,結果卻是輸出NaN。
邊界條件,測試程式在一些很極端的情況或條件下執行,是否還能正常運作。
假如我們成功通過了所有的test case,恭喜你! 就會看到Success的畫面,告訴你程式的執行時間和執行效率跟其它提交者相比快了多少,以及記憶體的用量狀況,下面的next challenges則是推薦相關或是相似的題目給你。
下方會列出你的歷史提交紀錄,這邊稍微解釋一下status個別代表的意思
Accepted
- 解題方法通過了所有的test caseWrong Answer
- 解題方法並沒有通過全部的test caseOutput Limit Exceeded
: 超過輸出長度,提交前記得要把console.log註解或是拔掉,不然就會看到這個錯誤訊息了Runtime Error
: 執行時間錯誤,題目希望解題的時間複雜度為O(n)但你的解法卻是O(n²),或是不小心寫了無窮迴圈上面表格裡的status都可以點擊,就會看到每個提交答案執行時間的分布,看你落在哪個區間,有PR值的既視感。
點擊柱狀圖的話,會跳出一個彈窗,顯示那個時間區間提交的程式碼內容,這時候就可以參考一下別人的寫法為甚麼執行效率比較好。
不過有些題目真的是想破頭都不知道怎麼解阿! 不是付費會員又不能看solution,該如何是好呢?之前都會Google leetcode xxx answer看別人的解法,其實根本不用這麼麻煩,可以去點擊左上角頁籤的discuss,裡面有很多人分享自己的解法。
在discuss裡面可以在右邊的標籤區選擇程式語言或是解題技巧的分類,假設我們想看javaSript的解題方法,就點選javaScript的標籤。
就可以看到用javaScript作答的解題內容了,可以趁這個機會看一下別人的解題思路!
以上就是leetcdoe的基本介紹,其實刷leetcdoe的過程很有趣,寫出來的時候很有成就感,寫不出來的時候很苦惱,但必須說這是需要刻意練習的,在ptt上看到大神分享刷題進Google的故事,特別設計了一套刷題的訓練如下
看完只能說奉上我的膝蓋,這真的是需要毅力跟恆心才能辦到,不過上述流程對於平凡人實在是太硬了,還是先依照自己的節奏來練習,可以培養每周刷幾題的習慣,維持解題的手感,祝大家刷題愉快!