iT邦幫忙

2021 iThome 鐵人賽

DAY 1
4
Software Development

LeetCode 雙刀流:Python x JavaScript系列 第 1

LeetCode 是什麼?為什麼要刷題?

什麼是 LeetCode?

LeetCode 是一個程式語言的線上題庫平台,收集了大量科技、軟體公司面試時所出現的技術題(技術面試中俗稱的白板題)。LeetCode 會被很多資訊產業的求職者視為「準備面試時」的題庫,而對題庫進行大量練習的行為稱為「刷題」。

▶ 官方網站:https://leetcode.com/

LeetCode 介面

LeetCode 是一個線上解題系統

OJ(Online Judge)全名是線上解題系統,早期是用於演算法競賽(競技程式)的線上系統,即時評測參賽者所提交的。在眾多的線上解題系統中,LeetCode 以「公司面試題目」為導向殺出一條血路,提供技術面試中常見的題目,作為平常的練習或是面試前的準備。當然除了 LeetCode 之外,也有其他適用於平常練習的平台都有各自的特色:

  • Codility:更強調面試體驗,提供題目給公司作為面試使用
  • HackerRank:適合初學者,內容包含基礎題目到進階難題
  • Codewars:導入許多遊戲化與社群的機制,讓刷題更有趣更好玩

這些解題平台的目的其實都是提供一種「評斷程式能力到什麼階段?」的目標,不管是幫助開發者確認自己的能力到什麼階段或是提供面試方作為篩選的標準。

為什麼要刷題?

那為什麼程式開發者需要刷題呢?程式學習其實跟數學學法很像,除了理論公式之外,也需要搭配題目實作。一般而言,我們可以將程式的學習分成兩個階段:

  • 程式語法
  • 解題能力

「程式語法」指的就是你能不能看得懂程式碼,理解範例是如何運作的。但「解題能力」是指當你遇到一個問題時,能否轉換成程式的角度回答問題。很多人會問資料結構或演算法對工程師寫程式來說重要嗎?尤其是那些非本科系的轉職者,更會擔心資料結構或演算法是否會成為求職時的門檻。

資料結構或演算法其實就是程式碼經年累月淬煉出的精華,經過整理而成的武功秘笈,適合已經會寫程式但想要把持續鍛鍊程式能力的人。但如果連程式的基本邏輯都尚未熟悉者,就貿然的進入刷題的世界中,也很容易原地打轉。總之,我自己覺得寫出會動程式不難,但要把程式寫好非常難。追逐程式實作技巧也許短期內會覺得很刻意,但立志寫出一個精簡高效的程式才是身為一個工程師該有的浪漫。

寫程式不只是學習程式語法,更需要搭配實作練習

那究竟該如何持續鍛鍊程式的技巧,找資料結構或演算法的理論課或是書來讀就好了嗎?

理論課其實也是從各種經驗跟問題所歸納出來的方法,所以理論課其實就是在教你各種手法跟操作(很多時候很抽象),就像你學習的數學時候會背公式那樣。但更重要的其實是觀念是如何建構,以及應該如何活用於題目當中,這才是解題/刷題過程中逐漸養成的。刷題的重點來源培養解題的手感,如何把從問題中使用正確的手法。刷幾題才夠其實是一個假議題,當然是刷越多越好啊(但現實是沒有時間)。所以我會建議不要盲目地刷題,應該思考如何有系統的解題,從一個題目當中盡可能嘗試練習到不同的思考角度,培養思考問題的廣度。

LeetCode 雙刀流:Python x JavaScript

近年來許多科技公司在面試時都會有「白板題」的技術考題,也帶動近年來軟體圈瀰漫著一股「LeetCode 刷題」的風潮。面試者會把 LeetCode 視為面試準備的考古題,但我一直覺得如果只是為了面試而刷題反而失去的寫程式的初衷。因此我打算在這次的鐵人賽當中,以 LeetCode 作為主軸,深入淺出地拆解各種面向的解法。

內容預計會分成三個階段:

① 刷題前的正確姿勢
② 各種資料結構與演算法的解題脈絡
③ 除了刷題之外的事

過程中我們利用從 Python 與 JavaScript 兩個程式語言進行實作,專注在程式的邏輯,探索超越程式語言之外更純粹的邏輯思考。


嗨,大家好!我是維元,一名擅長網站開發與資料科學的雙棲工程師,斜槓於程式社群【JSDC】核心成員及【資料科學家的工作日常】粉專經營。目前在 ALPHACamp 擔任資料工程師,同時也在中華電信、工研院與多所學校等單位持續開課。擁有多次大型技術會議講者與競賽獲獎經驗,持續在不同的平台發表對 #資料科學、 #網頁開發 或 #軟體職涯 相關的分享,邀請你加入 訂閱 接收最新資訊。


下一篇
LeetCode 解題的思考策略與解題地圖
系列文
LeetCode 雙刀流:Python x JavaScript30

尚未有邦友留言

立即登入留言