圖像和動畫式教學,讓演算法更容易被理解
看似抽象複雜的演算法其實富有邏輯性,本課程利用動畫圖像拆解每個演算法流程,並詳盡敘述每一個流程發生的前因後果,讓複雜抽象的資料結構變得非常簡單!
LeetCode 每題練習均有詳解,一步步分析解題邏輯還有知識點!
每一題帶到的 LeetCode 練習題,我們都會一步步帶各位拆解題目,分析題目,並統整此題學到的知識點還有小技巧,濃縮成帶得走的知識,而非單純背題目!
我們會站在新手容易遇到的問題與理解困難點出發,一行一行詳細解釋程式碼,不漏掉任何標點符號,絕不跳步驟,因為坊間有太多教學,都認為學生是愛因斯坦,一直跳步驟,導致最後學生跟不上而放棄。
講師競賽經歷
- 全國大專院校資訊工程競賽智慧駕駛組以智慧駕駛專注度輔助系統 - 獲得全國第二
- 全國大專院校智慧創新競賽 - 全國佳作
- 多項軟體開發專案經驗(皆以 Django 為主)
- 多次與業界合作開發科技產品經驗(皆以 Python 為主)
- 協助企業架設電商網站&多年接案使用 Django 開發經驗
- 多年軟體開發實務經驗(皆以 Django & Python 為主)
- 技術網站 Github
課程內容設計(本課程為進階課程)
資料結構與演算法部分
本課程的規劃由淺入深,並且環環相扣,逐一地建立資料結構與演算法的邏輯概念。
本課程會包含 5 種重要的進階資料結構,其延伸下來的細節單元多達 40 幾個,從 Binary Search 二分搜尋,到進階的 Dynamic Programming 動態規劃。在每一個章節,都會搭配 LeetCode 題目作爲實戰練習,針對學完的理論基礎,用實作的方式融會貫通,同時也讓同學可以直接感受面試題目的難度,加深學習成效,幫助同學能夠更輕鬆的拿取軟體工程師 Offer!
第一章|Binary Search 二分搜尋
Binary Search 不只是「在排序陣列中找數字」,更重要的是理解如何利用單調性縮小搜尋範圍。
本章將從基本原理開始,說明左右邊界的設定、迴圈與遞迴寫法,以及常見的 off-by-one 錯誤,並進一步延伸至:
- 在排序陣列中搜尋指定元素
- 尋找最小滿足條件值與最大可行解
- Search on Answer
- 隱性排序與單調性問題
透過實際題目,建立判斷「這題能不能二分」的能力,而不只是套用固定模板。
第二章|Two Pointers 雙指標
Two Pointers 是陣列、字串與鏈結串列題目中非常常見的解題技巧,但不同題型中的指標移動邏輯也有所不同。
本章將整理幾種常見模式,包括:
- 有序陣列中的左右逼近
- 陣列與 Linked List 中的快慢指標
- 區間型雙指標
- Sliding Window 的延伸應用
除了實作之外,也會練習如何根據題目條件決定指標該如何移動,以及如何將原本需要巢狀迴圈的暴力解法,優化成更有效率的線性解法。
第三章|Greedy 貪婪演算法
Greedy 的難點通常不在程式碼,而在於判斷「為什麼每一步選擇當下最好的解,最後真的能得到最佳答案」
本章將從 Greedy 的核心概念開始,介紹:
- Greedy 的設計思維
- 貪婪選擇特性與最佳子結構
- 常見的區間與選擇問題
- Greedy 與 Dynamic Programming 的差異
- 如何判斷一個 Greedy 解法是否成立
搭配 LeetCode 經典題型,練習從題目條件找出合理的選擇策略,同時避免只憑直覺使用 Greedy 而得到錯誤答案。
第四章|Dynamic Programming 動態規劃
DP 經常讓人覺得難,是因為真正困難的不是公式本身,而是如何定義問題與找出狀態之間的關係。
本章將從「什麼時候該想到 DP」開始,逐步介紹:
- 重複子問題與最優子結構
- 暴力遞迴與 DP 的關係
- Top-Down 與 Bottom-Up
- 一維 DP
- Base Case 的設計
- State 與 Transition 的建立方式
- Greedy 與 DP 的判斷差異
並透過 Fibonacci、Coin Change 等經典題目,建立一套可以反覆使用的 DP 拆題流程,讓學員知道轉移公式是如何推導出來,而不是單純背答案。
第五章|Graph 圖論
Graph 是描述「節點之間關係」的重要資料結構,也是技術面試中常見的題型之一。
本章將從 Graph 的基本概念開始,釐清:
- Graph 與 Tree 的差異
- BFS 與 DFS 的使用時機
- Graph 的表示方式
- 為什麼 Grid 問題也可以視為 Graph
- 如何處理節點之間的連結與遍歷
並以 Number of Islands 等經典題目為例,練習將看似不同的問題轉換成 Graph 模型,再選擇合適的搜尋方式解題。
第六章|Sliding Window 滑動視窗
Sliding Window 特別適合處理 Subarray、Substring 等「連續區間」問題。
本章將從暴力枚舉區間的限制開始,介紹如何利用視窗避免重複計算,內容包含:
- Fixed Window 固定視窗
- Dynamic Window 可變視窗
- 左右指標的移動條件
- 合法視窗的維護方式
- HashMap、Set、Counter 等常見搭配資料結構
並透過 Longest Substring Without Repeating Characters、Minimum Size Subarray Sum 等題目,練習判斷 Sliding Window、Two Pointers 與 Prefix Sum 各自適合的情境。
第七章|Intervals 區間問題
Interval 題目的核心,在於先建立區間之間的順序,再利用排序後的資訊處理重疊、合併與選擇問題。
本章將介紹:
- Interval 題目的常見特徵
- 為什麼排序通常是第一步
- 區間重疊與不重疊的判斷
- Merge Interval
- Insert Interval
- Meeting Rooms
- Non-overlapping Intervals
透過不同題型,建立一套處理區間問題的固定思考順序,看到題目時能先判斷區間之間的關係,再決定後續解法。
教學方式
我們會主要以老師一行一行的寫程式來帶領大家學習,並用使用投影片來說明基本觀念,並且在較複雜的邏輯觀念部分,會以投影片動畫輔助各位了解其中原理!
投影片圖解並一步步說明觀念,把抽象觀念圖象化:
在面試新人的過程中,我深刻體會到: 真正重要的不是「背題目」,而是建立正確的解題思維與判斷能力。 許多演算法題目,在面試與實際工程中,考驗的並非技巧本身,而是能否快速分析問題結構、選擇合適的方法,並清楚說明設計邏輯。
希望能藉由這堂課程,幫助各位能夠更了解資料結構與演算法,並完成 LeetCode 練習,最終順利通過科技公司的面試!
回覆與作業設計
- 作業設計:有選擇題與是非題和數學計算題的作業設計,聚焦於資料結構和演算法的基礎觀念,幫助各位釐清觀念,還有抓到細節上的盲點!
- 課前問題回覆:購課前的問答,老師會在 2 天內進行回覆
- 課程討論回覆:課程討論區的問題,老師預計在 2 天內進行回覆
- 批改作業的頻率:老師預計在 7 天內進行回覆批改作業,並將按照繳交順序依序回覆批改
課前貼心提醒
各位不用擔心有任何問題不清楚,或解題有困難,歡迎隨時到課程留言區留言發問,老師會不定時來解決各位遇到的問題!