【LeetCode】 刷題地圖

認識LeetCode

LeetCode是練習程式語言的線上題庫,是目前最多人使用的學習資源之一,科技公司經常使用網站內的題目作為面試題目的基礎題型,尤其是全球排名靠前的各大軟體公司,在他們的帶動下,許多有涉足軟體工程領域的公司,都會使用LeetCode上面的題目作為面試標準。

LeetCode類似的網站還有CodeForcesfreeCodeCamp等等。

如何快速且有效的練習LeetCode

首先,要進步一定是需要刻意練習的,如果你是因為大家都再刷LeetCode、或者是大公司都考LeetCode的題目而跟著去刷題,想要藉此找到更好的工作,或者提升薪資,那麼漫無目的的刷題方式,只會不斷的消磨你的精力。

提高效率的方法#1 不要背題目,要去了解背後的核心演算法特性及為什麼要這麼做

如果是記憶力好到能把所有程式碼都記的一清二楚的人,可以不用看這篇,但是多數人都不會是天選之人,所以需要靠一些技巧來成功過關。
題庫中的題目,都不過是需求的最尾端,呈現出來的只是電腦科學的技術組合的某一種結果,但是在現實工作上,遇到的不會是一模一樣的題目。
又或者是在面試上,也有可能會遇上變化題、Follow Up等等不同的狀況,多半不是靠著死記硬背就能夠解決的,軟體的世界很自由,但也需要更多的彈性去應對。

因此要有效率的練習LeetCode,需要靜下心深入地去了解題目背後使用的技術知識的特性,以及為什麼選擇這些方法使用。
舉例來說,經典題Two Sum可以使用兩個迴圈來解題,初學者可以學到巢狀迴圈的用法,更進階的方式則是使用hash map來處理,使用hash map的意義在於節省兩層迴圈消耗的時間,但是會花費一些空間作為補償,這就是時間與空間的Trade off,而hash map特性是可以將資料用key儲存起來,在取出的時候可以快速地利用hash表的特性在極短的時間獲得資料。
同時,hash map也會在Graph的題型中被頻繁的使用到,如果沒有在解Two Sum的時候理解到hash map的特性與優勢,當需要大量儲存沒有任何順序性的資料的時候(例如:Island Perimeter),可能就會使用熟悉的Vector或者Array來做處理,造成計算時間過長的結果。

提高效率的方法#2 有時間限制的練習

LeetCode是沒有時間限制的,有的時候會因為卡住而拖了很久的時間,腦袋卡住的東西越多,就越容易想東想西,到最後多半直接放棄改天再來,這是很常見的狀況。所以如果要有效率的提升解題速度,每一次的練習都加上時間限制,讓時間的壓力,迫使大腦能夠更專注的在如何解決問題,同時加強大腦對解決問題方式的印象。

提高效率的方法#3 有輸出的練習

輸出練習一直是許多專家認為對學習最有效的轉化方式,像是教學、實際應用、知識分享等,都是一種輸出的方式。在大腦的學習系統中,輸出與輸入是兩個不同的系統,輸入能夠讓我們理解大量的吸收外部輸入的資訊,但僅限於我們的腦海的記憶區塊,而輸出才能夠將這些資訊真正的內化並且烙應在大腦的神經迴路上。

LeetCode的解題挑戰,本來就是一種輸出練習的形式,所以才會對寫程式功力的提升有效果。同時,如果能夠將這些知識應用到解決各種現實問題上,能夠更有效地獲得學習。與輸出有關的方式像是,Side Project、教學、寫文章分享、應用到工作上等等方式。

提高效率的方法#4 大量的重複練習

這句話真的是廢話,但是是很難做到的廢話。現代人的生活太忙碌了,每分每秒的時間都很珍貴,但是一定時間量的重複練習仍然是必要的,盡可能的劃出時間,例如每天空下一個小時,做一場LeetCode Rush之類的,就像持續運動一樣,重複練習可以逐漸訓練大腦記住寫程式解決問題,讓LeetCode學習效率變得更好。

推薦閱讀:快速學習Leetcode的6個步驟

提高效率的資源#1 經典75題 Blind 75 / Grind 75

Blind 75 是Facebook工程師Yangshun Tay整理出來的75個LeetCode題庫內的經典問題,最初發布於Blind,所以又稱Blind 75,這些問題由簡單到困難,包含了各種面試中常見的基礎問題以及問題組合。而在2022年他將原本的題庫更新成更好的版本,叫做Grind 75,不過實際上有169題。這個題目列表在軟體界非常有名,對準備軟體面試非常有幫助,正在準備的人一定要多練習幾遍。

LeetCode解題分享

提示:可以用Ctrl + F 搜尋想要找的題目。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

回到頂端