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秒以上的等待,於是瀏覽器們著重在使用記憶體,好帶給使用者快速的體驗。
那有著重空間複雜度的場合嗎?有的,在部分伺服器、嵌入式系統等,提供的是有限的記憶體,此時該思考如何在有限的記憶體下,爭取到多少時間?
當然,目前各大公司提到演算法時,仍舊著重在時間複雜度,記憶體的問題在特定產業才有可能遇到,因此,寫出能夠快速執行的程式碼幾乎是各大公司要求的基本功。