註冊登入 LeetCode 之後,可以從 Problems 頁面中瀏覽目前所有的題目列表:
每一個題目包含「答對率」及「難易度」,部分題目提供「參考解答」,付費解鎖可以取得「常考頻率」。若你沒有急迫的刷題區需求或是特定的練習類型的話,根據難易度逐步刷也是一種蠻好的策略。其實是作為一種長期練習為目的話,適合打散熱門與分類進行無差別的刷題。這種情況下,可以使用 LeetCode 提供的「難易度」與「通過率」兩個指標排序,從簡單且很多人都通過的題目慢慢往比較難的題目開始逐步進行。
每一個題目的介面分成為左方的「題目描述」,右上的「程式碼」與右下的「執行結果」三個區域。「題目描述」區塊中會先提供一個簡單的問題描述(通常就是一個引言),技術或應用描述的方式都有。通常會有簡單的範例,這個例子而言就提供三個範例提供參考,包含 Input 與 Output。如同前面所講的所謂的寫程式就是利用電腦的記憶與運算,根據 Input 產生 Output 的過程,而 LeetCode 則是要我們實現一個程式或演算法在有限步驟與時間內完成從輸入到輸出的過程中。
從左方的「題目描述」的範例再往下滑一點,還有幾個是你容易錯過的小細節:
第一個是題目的限制,通常會包含題目輸入範圍以及規定題目要求輸出的時間或是空間上的規定。如同我們前面所說,當我們面對一個題目的時候有三個重點需要確認:
① 題目的輸入與輸出範圍
② 輸入範圍中極端的邊界條件(或是特例)
③ 所可以接受的時間/空間複雜度
有些題目並不會把這三個重點寫得很明確,可能需要多方推敲。不過這三個 必須要注意的事項 就是題目描述之外,你需要特別留意的。有些題目會有 Follow-up ,這裡會給些可以進一步思考的點或是要求,但通常不是嚴格的規定(就是讓你玩玩的)。另外在最下方的地方會有該題目的類似題或是提示,都是你在練習的過程時可以看看的。
右上的「程式碼」的程式碼可以選擇不同的程式語言進行練習,平台目前支援 C/C++、Python、JavaScript ... 等共計 18 種的程式語言,可以參與需求選擇想要練習的程式語言。不同的語言主要的差異在於執行的速度有根本上的差異或是不同語言也有自己的特色用法,但基本的思考運算邏輯則是可以通用的。右下的「執行結果」有兩種提交方式,「Run Code」的話只會執行題目中比較基本的測試案例(Test Case),讓你快速看一下邏輯是否符合題意;「Submit」會完整提交,會去檢查該題目所有的測試案例,通常會包含比較極端或是特殊的輸入值。提交後的 Submissions 會簡單的統整你的解法在所有程式中的比例,還有程式時間與佔用的記憶體空間:
完成一個題目之後,請先透過結果的時間花費與空間佔用恆量自己該程式寫得好不好。我們在前幾天有說刷題過程中,「如何最大化一個題目的效益」也是刷題過程中重要的關鍵。比起盲目的刷題之外,如何從一個盡可能地持續迭代、持續優化並且思考沈澱,讓你從一個題目掌握到更深更廣的效益。因此提交一個正確解答之後,你要做的並不是馬上就解下一題,而是思考與沈澱之下,然後嘗試優化的策略。進入「一個題目」的解題過程時,可以分成「#動手之前先思考 → #初探直覺解 → #刻意優化 → #舉一反三」幾個階段的優化過程。
嗨,大家好!我是維元,一名擅長網站開發與資料科學的雙棲工程師,斜槓於程式社群【JSDC】核心成員及【資料科學家的工作日常】粉專經營。目前在 ALPHACamp 擔任資料工程師,同時也在中華電信、工研院與多所學校等單位持續開課。擁有多次大型技術會議講者與競賽獲獎經驗,持續在不同的平台發表對 #資料科學、 #網頁開發 或 #軟體職涯 相關的分享,邀請你加入 訂閱 接收最新資訊。
Testcase 也裡面可以放入自己定義的輸入或輸出。所以有時候 submit 失敗的時候,就會把失敗的 case 抓回來,放到 Testcase 裡面,然後嘗試解決,已確保下次 submit 的時候,同樣的 case 可以被解決掉
學到一招了!