Leetcode 是什麼?誰需要刷題?工程師面試要刷到什麼程度?

  • 2023-02-24
  • 資訊工程系辦
什麼是 LeetCode?
隨著大資工時代的到來,越來越多人憑藉著非大學課程的訓練,自己練出軟體世界的基本功,尤其以網路開發為主。工程師本身的起薪高,容易吸引到大量的人才投入。當好的職缺出現在求職市場時,眾多求職者將湧入其中爭取面試機會,企業使用履歷進行篩選之外,會考驗應徵者的基本開發能力以及專案經歷。前者常見的測試方式為白板題與線上題庫測驗;後者則看求職者的作品集來了解。而 LeetCode 便是常見了解題目的手段,其記錄各式各樣的題目好讓求職者有個底。

LeetCode 的題庫內容有:

Algorithm
Database
Shell
Concurrency
最常見的以演算法為主,這次的系列將著重於此。

說穿了,刷 LeetCode 好比學生時代刷題庫,目的是熟悉題型好應對各式各樣的基本題與變形題。目的只有一個,面試中遇到的技術問題可以順利通過

我會怎麼寫?
順序是這樣的:

介紹 LeetCode 與一些基本刷題知識
介紹資料結構的特性。
列入在 LeetCode Tag 內的資料結構優先討論。
嘗試用 JS、Java、C 各解一次,目的是增進三種語言的熟練度。
演算法用來輔助資料結構。
因為我最熟悉的語言是 JS,所以相關的術語概念將以 JS 為主。

刷 LeetCode 該有的基本知識
如果什麼都沒準備,以 Two Sum 來說
這邊聽我娓娓道來第一次使用 LeetCode 的情境:

註冊 LeetCode 帳號成功、點選 Problems 後,印入眼簾的是一千多題,不懂門路的我,想說過往寫題目都從第一題開始,而且難度標注是 Easy,應該是沒問題可以順利解決,於是點擊 Tow Sum。
結語
任何專業領域都一定有測不準原理的窘境,在程式設計的便是記憶體與時間的抉擇。拜摩爾定律協助半導體產業的發展,記憶體朝向大儲存量與低廉價格發展,使得空間複雜度變成次要,時間複雜度成為主要關注的重點。最典型的運用便是各式各樣的網頁,使用者不能忍受3秒以上的等待,於是瀏覽器們著重在使用記憶體,好帶給使用者快速的體驗。

那有著重空間複雜度的場合嗎?有的,在部分伺服器、嵌入式系統等,提供的是有限的記憶體,此時該思考如何在有限的記憶體下,爭取到多少時間?

當然,目前各大公司提到演算法時,仍舊著重在時間複雜度,記憶體的問題在特定產業才有可能遇到,因此,寫出能夠快速執行的程式碼幾乎是各大公司要求的基本功。