🚨週年慶最後三日🚨全站課程 83 折、最後加碼 $899💰 再送激高 $1600 券❗️
天
時
分
全站 83 折🔥
登入/註冊
超圖解資料結構演算法:Leetcode 實戰基礎
0 seconds of 1 minute, 14 secondsVolume 0%
Press shift question mark to access a list of keyboard shortcuts
鍵盤快捷鍵
播放/暫停空白鍵
音量增加↑
音量減少↓
快進 5 秒→
倒退 5 秒←
開啟/關閉字幕c
全螢幕/離開全螢幕f
靜音/取消靜音m
Decrease Caption Size-
Increase Caption Size+ or =
跳轉至%0-9
00:00
00:00
01:14
 
Chris

超圖解資料結構演算法:Leetcode 實戰基礎

這堂課將用最好懂的圖解方式,帶領大家建構扎實的資料結構與演算法基礎,且透過 Leetcode 題目練習所學演算法,強化自身解題能力!
Hahow AI 學習升級
49.1 k 的人也在觀看
4.8
(27)

關於課程

課程包含

包含 10 章 72 單元、2 項作業

課程時長

6 時 35 分鐘

課程總人數

391 位同學

觀看限制

不限觀看次數,還會附贈完課證書

學習升級

Hahow AI 學習助教
無需額外付費
即時問答、重點整理、測驗理解,讓知識派上用場

最新消息

課程內容

為什麼要學好「資料結構」與「演算法」呢?

學習「資料結構」和「演算法」有以下幾個重要的原因:
  1. 提高程式效率:資料結構和演算法是程序設計和編程的核心技能之一,能讓程式運行得更快、更有效率。

  2. 解決問題:學習資料結構和演算法能夠幫助你理解如何解決不同類型的問題,從而提高編程能力和解決問題的能力。

  3. 提高程式品質:了解不同的資料結構和演算法,可以使你更好地設計和編寫高品質的程式,減少程式出錯的可能性。

  4. 面試加分:在技術面試中,面試官通常會問到資料結構和演算法相關的問題。如果你能熟練掌握這些知識,可以增加你通過面試的機會。

總之,學習資料結構和演算法是非常重要的,可以幫助你成為一名更優秀的程序設計師,並且在工作中有更好的表現。

為何練習 Leetcode 可以提升技術面試表現?

LeetCode 平台收集了大量科技公司的技術面試題目(Google、Facebook 等)

許多求職者使用 LeetCode 作為準備面試的工具,進行大量練習。這種練習的行為被稱為「刷題」。且同時面試會考的 Leetcode 題目幾乎都是建立在資料結構和演算法的理論上!

模擬真實面試情境

LeetCode 的題目往往與科技、軟體公司實際面試時所出現的技術題非常相似。因此,刷題可以讓求職者更好地模擬真實面試情境,了解實際面試中可能會遇到的題目類型和難度,有助於提前準備。

可以熟練資料結構理論(面試白板題常考)

程式學習其實跟數學很像,除了學完資料結構和演算法理論之外,也需要搭配題目實作。練習 Leetcode 才能融會貫通所學的理論,讓面試的時候可以更熟練的回答技術問答。

培養面試解題能力

LeetCode 的題目難度涵蓋了從簡單到困難的各個級別,通過不斷練習可以培養求職者解題的能力,包括理解問題、分析問題、設計算法、編寫代碼、測試和除錯等方面(面試官很看重你如何分析問題還有怎麼去理解問題!)。

增強面試臨場自信

通過解決 Leetcode 上的問題,您可以提高自己的技能水平和信心,如同考試寫考古題一樣,從而更加自信地應對面試。這種信心可以幫助您在面試中表現得更好,從而提高獲得工作的機會。

課程緣起

大家都知道資料結構和演算法是面試的根本,也是決定你職涯薪水的重要技能和是否能進入大公司外商的關鍵。目前市售的書籍描述都過於複雜,把簡單的觀念複雜化,以及教的內容過於深入,導致學生一開始認為資料結構和演算法很困難就放棄了。

在目前的科技業環境,面試白板題將決定你的面試成果,許多自學的人通常不會有本科系知識,因此自學想追上其他軟體工程師的人非常適合利用這門課程穩固基礎,可以從頭開始進行有系統的學習,而面試求職、求學更是需要這門課快速複習、刷題解題,在短期內提高面試求職的成功率!

課程核心特色

課程特色包括圖解和動畫教學,以最直覺、最好理解的方式呈現內容;搭配 LeetCode 題目練習,並採用有架構、循序漸進的學習安排。

圖像和動畫式教學,讓演算法更容易被理解

看似抽象複雜的演算法其實富有邏輯性,本課程利用動畫圖像拆解每個演算法流程,並詳盡敘述每一個流程發生的前因後果,讓複雜抽象的資料結構變得非常簡單!

教你從完全不懂資料結構到成功解出 Leetcode 題目

這門課不用擔心零基礎,我們會帶你學習基本資料結構與演算法,詳盡地教你每一個觀念與細節,讓你有能力獨立解出 Leetcode 面試題目!

Leetcode 練習題題詳解,一步步分析解題邏輯還有知識點!

每一題帶到的 Leetcode 練習題,我們都會一步步帶各位拆解題目,分析題目,並統整此題學到的知識點還有小技巧,濃縮成帶得走的知識,而非單純背題目!

我們會站在初學者容易遇到的問題與理解困難點出發,一行一行詳細解釋程式碼,不漏掉任何標點符號,絕不跳步驟,因為坊間有太多教學,都是認為學生是超人,就一直跳步驟,導致最後學生跟不上而放棄。

有架構的課程設計,循序漸近一次搞懂所有重要資料結構和演算法

本課程將建立資料結構基礎,再循序漸進學習艱難的演算法,也實際搭配使用 Leetcode 面試題去做實戰訓練,增加熟練度和印象。每個步驟清楚演繹,讓你熟悉在面試時的技術問答,提升面試成功機率!

課程內容設計(本課程為基礎課程)

資料結構與演算法部分

本課程的規劃由淺入深,並且環環相扣,逐一地建立資料結構與演算法的邏輯概念。

本課程會包含 12 種重要的資料結構,從基本的時間複雜度分析程式效率,到進階的樹狀資料結構。在每一個章節,都會搭配 Leetcode 題目作爲實戰練習,針對學完的理論基礎,用實作的方式融會貫通,同時也讓同學可以直接感受面試題目的難度,加深學習成效,幫助同學能夠更輕鬆的拿取軟體工程師 offer!

課程目標與內容涵蓋 12 種重要資料結構與演算法:時間複雜度(BigO)、陣列、鏈結串列、雙向/環狀鏈結串列、堆疊、佇列、樹、二元樹、二元樹與二元搜尋樹走訪、遞迴及雜湊,並搭配實戰 LeetCode 練習。

實戰 Leetcode 練習部分

我們會挑選與課程相關的內容題目和常見的面試題目來練習。在練習的同時,也會帶領同學的思路來一步步拆解並分析題目,讓同學能夠快速理解題目意思,找出題目邏輯,最後也會手把手的寫程式解題,並詳細說明每一行的程式功能,讓同學都能跟上每一步的思路!

以 LeetCode 第49題 Group Anagrams 為例,結合課程相關題目與實戰練習,帶領學員分析解題思路,並以 Python 程式碼示範分組字謎的解法。

課程單元規劃說明和學習目標

第一章:基本資料結構演算法觀念時間複雜度(BigO)

時間複雜度是一個算法執行所需時間的度量,通常用大 O 符號表示,例如 O(n)、O(log n) 等。時間複雜度與算法所使用的資料結構有很大的關係,不同的資料結構會對同一個算法的時間複雜度產生不同的影響。

此外,資料結構的操作也會影響算法的時間複雜度。例如,插入、刪除、查找等操作所需時間的不同,會對算法的效率產生影響。因此,在設計資料結構時,需要考慮不同操作的時間複雜度,以便在不同場景下使用最適合的資料結構。

【 學習目標 】

  1. 理解資料結構和演算法的基本概念和定義,以及它們在實際問題中的應用。
  2. 掌握「時間複雜度」的基本概念和使用方法,能夠分析和評估算法的時間複雜度。包括最壞、最好和平均情況的時間複雜度。
  3. 能夠對算法的運行時間和空間複雜度進行分析和評估,從而選擇最佳算法。
  4. 能理解不同算法之間的比較,能夠選擇適合的算法解決不同類型的問題。

【 未來工作應用地方 】

  1. 程式編寫上:能夠分析和評估算法的時間複雜度和空間複雜度,從而能夠選擇最佳的算法來解決問題,提高工作效率。
  2. 程式遇到效能問題時:能夠更好地應用資料結構和演算法的概念和定義,從而提升工作上程式碼的效能問題。
單元 1 :  為什麼要學資料結構和演算法?為什麼要刷題?

單元 2 :  什麼是資料結構和演算法

單元 3 :  如何分析演算法:時間複雜度 (BigO) 觀念和計算

單元 4 :  如何分析演算法:時間複雜度圖表和空間複雜度觀念和計算

單元 5 : 刷題(Leetcode)必備觀念

單元6 :  (補充)Leetcode基本操作介面介紹講解
第二章:陣列(Array)

陣列(Array)是一種資料結構,它由相同類型的元素集合組成,這些元素在內存中連續存儲。陣列通常用於存儲一組數據,並且可以按照一定的索引方式訪問這些數據。

這一章節將深入介紹陣列在程式設計中的基本概念、包括如何定義陣列、陣列的元素以及如何訪問陣列中的元素等。

接著我們會介紹如何使用陣列來解決 Leetcode 實際問題。例如,如何在陣列中搜尋元素、如何將元素插入到陣列中以及如何刪除陣列中的元素等

【 學習目標 】

  1. 掌握如何創建和訪問陣列,以及如何使用陣列來解決 Leetcode 實際問題。
  2. 理解陣列的時間和空間複雜度,並能夠選擇最適合的演算法來解決問題。
  3. 理解陣列的刪除插入搜尋的程式操作,並能夠熟練的來處理複雜資料。

【 未來工作應用地方 】

  1. 陣列被廣泛應用於數據庫管理系統中,例如在存儲和檢索大量數據時使用陣列可以提高效率。
  2. 遊戲開發方面:陣列被廣泛用於遊戲開發中,例如存儲遊戲中的角色、敵人和物品等信息,以及實現遊戲中的碰撞檢測和運動模擬等。
  3. 自然語言處理:陣列被廣泛用於自然語言處理中,例如存儲文本數據和語言模型等。
單元 1 : 陣列(Array)圖解基本概念和常用技巧&時間複雜度

單元 2 : python 實作基本操作Array(新增、刪除、查找、建立等)

單元 3 : 陣列 Leetcode 題目實戰練習
第三章:雜湊(Hash)

雜湊(Hash)是一種常見的資料結構,用來將大量的資料映射到一個固定範圍的小區間內,以便於快速查找、插入或刪除資料。它通過將關鍵字映射到一個固定範圍的整數值,然後將整數值作為索引來查找資料。

【 學習目標 】

  1. 理解雜湊函數的定義與概念。
  2. 知道如何設計一個適合的雜湊函數。
  3. 了解雜湊表的結構及其優缺點。
  4. 掌握雜湊碰撞的處理方法。
  5. 知道如何選擇適當的雜湊函數和解決碰撞的方法,以提高雜湊表的效率。
  6. 會實作雜湊函數,並且能夠解出對應 Leetcode 題目

【 未來工作應用地方 】

  1. 資料庫設計:在資料庫中,雜湊函數被用來加速查詢操作。每當一筆資料被新增到資料庫中時,一個雜湊值會被計算並與該資料相關聯。當查詢資料時,只需要計算目標資料的雜湊值,就可以快速找到相應的資料。
  2. 搜尋引擎:當搜尋引擎在網路上收集資料時,它們需要一個快速的方式來搜尋和存儲這些資料。雜湊函數可以用來加速這個過程,並幫助搜尋引擎更快地找到相應的資料。
單元 1 : Hash Table 雜湊表簡介&mapping 映射簡介

單元 2 : 什麼是hash table (雜湊表) 和Hash Function(雜湊函數)

單元 3 : Hash Function(雜湊函數)運作簡介

單元 4 : Hash Table 的碰撞和解決方法

單元 5 : Hash Table 的時間複雜度以及在python 中的形式

單元 6 : Hash Table雜湊表的優缺點

單元 7 : Hash Table 程式碼實作(python)

單元 8 : Leetcode 題目實戰練習(1)-217. Contains Duplicate

單元 9 : Leetcode 題目實戰練習(2)-442. Find All Duplicates in an Array

單元 10 : Leetcode 題目實戰練習(3)-1512. Number of Good Pairs

單元 11 : Leetcode 題目實戰練習(4)-242. Valid Anagram

單元 12 : Leetcode 題目實戰練習(5)-1.Two Sum
第四章:堆疊(stack)

堆疊(Stack)是一種常見的資料結構,它具有「後進先出」(Last-In-First-Out,LIFO)的特性,即最後放入的元素會最先被取出,而最先放入的元素會最後被取出。

本章中,我們將了解堆疊的實現方式,包括使用陣列和鏈結串列。此外,我們將研究如何使用堆疊來解決實際問題,例如括號匹配問題、迷宮問題等等。

【 學習目標 】

  1. 學會堆疊的定義和基本操作。
  2. 學會使用陣列資料結構建立堆疊(stack)。
  3. 學會使用鏈結串列資料結構建立堆疊(stack)。
  4. 解決堆疊的 Leetcode 問題:括號匹配問題、迷宮問題等。

【 未來工作應用地方 】

  1. 在軟體設計中:堆疊可以被用於函式呼叫、遞迴、回溯等場景中。
  2. 在圖像處理工作中:堆疊可以被用於圖像處理算法中的像素處理和圖像增強。
  3. 堆疊在程式語言和軟體工程等領域中是非常基礎且重要的資料結構,學習和掌握其應用和運用,有助於提高程式設計的能力和效率。
單元 1 : 堆疊 (stack) 圖解核心概念

單元 2 : 堆疊的重要操作&堆疊時間複雜度

單元 3 : python 實作建立堆疊

單元 4: 用鏈結串列建立堆疊(建議學習完鏈結串列單元再來觀看)

單元 5 : Leetcode 題目實戰練習(1)-20.Valid Parentheses

單元 6 : Leetcode 題目實戰練習(2)-150. Evaluate Reverse Polish Notation
第五章:佇列(Queue)

佇列(Queue)是一種具有先進先出(First-In-First-Out,FIFO)特性的資料結構,就像排隊買東西一樣,先到先服務,後到後服務。佇列最常用的操作是在佇列的後端(Back)新增元素,並在佇列的前端(Front)刪除元素。

【 學習目標 】

  1. 了解佇列的定義和特性。
  2. 學習如何實現基本佇列操作,例如:資料插入佇列(enqueue)、從佇列中刪除元素(dequeue)、判斷佇列是否為空。
  3. 學習特殊佇列:環狀佇列等。
  4. 學習如何設計使用佇列的演算法,例如廣度優先搜索算法。

【 未來工作應用地方 】

  1. 資料處理:佇列在資料處理方面擁有廣泛的應用,例如數據緩存、消息佇列、管道等。在這些應用中,佇列可以用於調度任務、緩解網路傳輸過程中的瓶頸問題、儲存大量的數據等。
  2. 排隊系統:在現代社會中,排隊系統已經成為了必不可少的一部分。例如,銀行、超市、餐廳、公共交通等等場所都需要使用佇列來管理人流和物流。因此,佇列算法在這些場所中發揮著非常重要的作用。
單元 1 : 佇列 (queue) 圖解核心概念和操作&時間複雜度

單元 2 : HashTable、stack、queue和array的比較

單元 3 : python 實作建立佇列

單元 4 : Leetcode 題目實戰練習(1)-933. Number of Recent Calls
第六章:鏈結串列(Linked List)

鏈結串列是一種常見的資料結構,用來儲存一連串的節點(node)。每個節點包含了資料本身以及指向下一個節點的指標(pointer)。因此,所有節點串在一起就形成了一個鏈結串列。鏈結串列可以在任何位置進行增加、刪除操作,且不需要像陣列一樣需要移動其他元素,因此在某些情況下,使用鏈結串列會更加高效。

【 學習目標 】

  1. 了解什麼是鏈結串列,以及它如何與其他資料結構區分
  2. 掌握如何建立、操作和刪除鏈結串列,包括添加、插入、查找和刪除節點。
  3. 理解不同類型的鏈結串列,例如單向、雙向和環形鏈結串列,並能夠在適當的情況下使用它們。
  4. 理解鏈結串列的時間和空間複雜度,並了解如何分析它們以確定算法的效率。
  5. 掌握如何使用鏈結串列解決常見的問題,例如反轉鏈結串列、合併兩個鏈結串列和找到鏈結串列的中間節點等。

【 未來工作應用地方 】

當你在開發軟體時,經常會需要處理大量的資料,而這些資料需要以特定的方式存儲和管理,例如用戶資料、交易記錄等等。這些資料通常會使用鏈結串列等資料結構來管理和存儲,這樣會比用陣列來的更有效地管理和存取資料。

單元 1 : 鏈結串列(Linked List)圖解概念介紹

單元 2 : 鏈結串列和與陣列的差異&時間複雜度

單元 3 : 建立鏈結串列的節點類別&python實作

單元 4 : python實作:遍歷鏈結串列

單元 5 : python實作:在鏈結串列中查找節點資料

單元 6 : python實作:在鏈結串列中插入一個新的節點。

單元 7 : python實作:從鏈結串列中刪除一個節點

單元 8 : 雙向鏈結串列和環狀鏈結串列概念

單元 9 : Leetcode 題目實戰練習(1)-203. Remove Linked List Elements

單元 10 : Leetcode 題目實戰練習(2)-876.Middle of the Linked List

單元 11 : Leetcode 題目實戰練習(3)-141. Linked List Cycle

單元 12 : Leetcode 題目實戰練習(4)-206. Reverse Linked List

單元 13 : Leetcode 題目實戰練習(5)-21. Merge Two Sorted List
第七章:迴圈(Loop)和遞迴(Recursion)

迴圈是一個線性的控制結構,通過條件判斷控制程式重複執行一段程式碼,達到節省代碼和提高效率的目的。常見的迴圈有 for、while、do-while 等。

遞迴是一個自己調用自己的函數,每次調用都會產生一個新的函數。遞迴在程式設計中通常用於解決可以分解為同類子問題的問題,達到簡化代碼和提高可讀性的目的。遞迴必須設定終止條件,否則將陷入無限遞迴。

【 學習目標 】

  1. 學習迴圈的進階概念和使用方法:例如,如何使用嵌套迴圈來處理複雜的問題。
  2. 能夠使用遞迴來解決常見的算法問題,如費氏數列、階乘和二分查找等。
  3. 本節也將介紹如何比較迴圈和遞迴的時間複雜度和空間複雜度,並分析遞迴和迴圈的優缺點。以及效能上的差別,因為在不同的情況下,它們的效率和優點是不同的。

【 未來工作應用地方 】

  1. 在 AI 資料處理和機器學習中:迴圈和遞迴也是常見的技術。例如,在處理大量資料時,需要使用迴圈來遍歷資料,進行統計和分析。而在機器學習中,遞迴神經網路是一種重要的模型。
  2. 在軟體系統管理中:迴圈和遞迴也被廣泛使用。例如,設置軟體自動化程序時,需要使用迴圈來完成同樣的任務。而在維護和診斷複雜系統時,使用遞迴算法可以讓問題得到更清晰的解決。
單元 1 : 遞迴 (Recursion) 圖解重要概念&階乘遞迴概念

單元 2 : 遞迴(recursion)和堆疊(stack)的關係

單元 3 :  迭代 (Iteration) 圖解重要概念&遞迴和迭代的比較

單元 4 : python 實作迴圈和遞迴(以費氏數列為例)

單元 5 : 二分查找遞迴概念

單元6 : Leetcode 題目實戰練習(1)-344. Reverse String
樹(Tree)

樹(Tree)是一種常見的資料結構,它以分層的方式組織和儲存資訊。樹由一個稱為根節點的頂端節點開始,然後分為多個子節點,每個子節點又可以有自己的子節點,以此類推

【 學習目標 】

1. 了解樹的重要概念和術語:根節點,父子節點,高度深度,還有層數等等 ,

2. 以及了解樹的不同種類和差異性。

3. 學習如何用陣列和鏈節串列實作建立樹

【 未來工作應用地方 】

樹是很重要的資料結構,凡舉電腦檔案結構,或是很多的後端資料庫都是使用樹來當作資料結構,所以了解樹後,可以更了解資料庫的運作,更容易設計出有效率的資料庫結構。

單元 1 : 樹 (Tree) 圖解概念介紹

單元 2 : 樹的重要概念與術語:父子節點、高度深度等

單元 3 : 樹(tree)的種類和差異性

單元 4 : python 實作建立樹

單元 5 : 用鏈結串列和陣列來建立樹的差別

單元 6  : Leetcode題目實戰練習(1)(此題建議二元樹章節學習完再看)-590. N-ary Tree Postorder Traversal 

作業1 : 樹 (Tree) 作業
第八章:二元樹(Binary Tree)

二元樹(Binary Tree)是一種資料結構,它由節點(node)和邊(edge)組成,每個節點最多只能有兩個子節點,且節點的排列形式是具有層級結構的。

【 學習目標 】

  1. 瞭解二元樹的概念及其結構
  2. 掌握二元樹的遍歷算法(先序、中序、後序、層序)
  3. 學習二元樹在 Leetcode 上的基本題型(面試很常考,很重要!)

【 未來工作應用地方 】

  1. 資料庫索引結構:資料庫中的索引可以使用二元樹實現,以便在查詢資料時快速定位到對應的資料位置。
  2. 搜索引擎:搜索引擎使用樹狀結構來組織和管理網頁資料,以便在搜尋時快速定位到對應的網頁。
  3. 機器學習:許多機器學習算法使用樹狀結構來進行資料分類和回歸。
  4. 遊戲開發:許多遊戲中需要使用樹狀結構來管理遊戲對象的關係和屬性,例如角色之間的父子關係、技能樹等。
單元 1 : 二元樹 (Binary Tree) 圖解概念介紹&python實作二元樹

單元 2 : BFS(廣度優先走訪)和層序走訪 (Level-order Traversal) 觀念&python實作

單元 3 : DFS(深度優先走訪) 觀念&python實作

單元 4 : 二元樹的前、中、後序走訪&python實作

單元 5 : Leetcode 題目實戰練習(1)-102. Binary Tree Level Order Traversal

單元 6 : Leetcode 題目實戰練習(2)-107. Binary Tree Level Order Traversal II

單元 7 : Leetcode 題目實戰練習(3)-637. Average of Levels in Binary

單元 8 : Leetcode 題目實戰練習(4)-104. Maximum Depth of Binary Tree

單元 9 : Leetcode 題目實戰練習(5)-144. Binary Tree Preorder Traversal

單元 10 : Leetcode 題目實戰練習(6)-226. Invert Binary Tree 

作業 2 : 二元樹
第九章:二元搜尋樹(Binary Search Tree)

二元搜尋樹(Binary Search Tree)是一種常見的二元樹(Binary Tree),其中每個節點最多只有兩個子節點。二元搜尋樹有一個重要的性質:對於每個節點,其左子樹上所有節點的值都小於該節點的值,而右子樹上所有節點的值都大於該節點的值。

這個性質使得二元搜尋樹非常適合用來實現「關鍵字查詢」等操作,例如快速地查找某個數據是否存在於數據集合中,以及查找數據集合中最大、最小值等。二元搜尋樹還可以通過中序遍歷(In-order Traversal)來實現對於數據集合的排序操作。

二元搜尋樹(Binary Search Tree)也是樹的一種,但是規則更嚴謹,但是卻也是非常重要的資料結構,我們會在這邊重新的和先前的樹還有二元樹做一次比對,統整差異化,讓各位不會搞混!

【 學習目標 】

  1. 了解二元搜尋樹的基本概念和性質,包括節點、根節點、左子樹、右子樹、二元搜尋樹的排序規則等。
  2. 掌握二元搜尋樹的建立和遍歷方法,包括中序遍歷、前序遍歷和後序遍歷。
  3. 知道如何在二元搜尋樹中進行查找、插入和刪除操作,以及相應的算法思路和實現方法。
  4. 瞭解二元搜尋樹的時間複雜度分析,掌握如何進行性能優化。
  5. 知道二元搜尋樹的應用場景,如查詢、排序、記憶體管理等。

【 未來工作應用地方 】

可以利用二元搜尋樹來實現各種查找、排序等功能,因此在資料庫、網路搜索、系統優化等方面都有應用。例如,在搜尋引擎中,可以利用二元搜尋樹儲存關鍵字並加速查找;在資料庫中,可以利用二元搜尋樹來實現快速查詢和排序等操作。此外,在軟體開發、編譯器設計、圖形學等領域中也常常使用二元搜尋樹。

單元 1 : 二元搜尋樹 (Binary Search Tree ) 圖解概念介紹&時間複雜度

單元 2 : 二元搜尋樹(binary search tree )的建立和新增資料

單元 3 : 二元搜尋樹(Binary search tree)搜尋資料&python實作

單元 4 : 二元搜尋樹DFS深度優先走訪(前、中、後序)&python實作

單元 5 : 二元搜尋樹BFS廣度優先走訪&python實作

單元 6 : Leetcode 題目實戰練習(1)-938. Range Sum of BST

教學方式

我們會主要以老師一行一行的寫程式來帶領大家學習,並用使用投影片來說明基本觀念,並且在較複雜的邏輯觀念部分,會以投影片動畫輔助各位了解其中原理!

手把手一行一行的寫程式帶領,零基礎也不怕聽不懂:

Python 程式碼示範二元樹節點建立:從 collections 匯入 deque,定義包含 data、left 與 right 的 TreeNode 類別,建立 A、B、C、D 節點,並設定 A 為根節點、B 與 C 為子節點、D 為 B 的右子節點。

投影片圖解並一步步說明觀念,把抽象觀念圖象化:

「遞迴:階層」示意圖,以 Factorial(3) 說明執行順序:依序呼叫 Factorial(2) 與 Factorial(1),先回傳 return 1,再逐層計算 2 × factorial(1) 和 3 × factorial(2),最後得到 3 × 2 × 1。

關於講師 Chris

大家好,我是 Chris,目前任職於軟體新創公司,畢業於國立大學資訊工程學系,曾在資訊競賽拿下全國第二與佳作等成績,並在大學期間參與過許多研究計畫、自行和廠商接案架設電商網站等,累積許多 SideProject 。我也對資料結構與演算法有非常大的興趣,打過程式競賽、寫了數百題的 Leetcode,並以 python 實作不少專案,包括大數據分析,機器學習,以及語音辨識領域。在進修過程中慢慢領悟一套學習心法,能理解想進入資訊領域的新手面臨的障礙,並能跳脫工程師思維,不把硬梆梆的內容丟給大家,而是用人人聽得懂的方式教會你寫程式,讓各位能夠成功轉職踏入工程師的大家庭!

講師作品

榮譽
  • 全國大專院校資訊工程競賽智慧駕駛組以智慧駕駛專注度輔助系統 - 獲得全國第二
  • 全國大專院校智慧創新競賽 - 全國佳作
  • 多項軟體開發專案經驗(皆以 python 為主)
  • 多次與業界合作開發科技產品經驗(皆以 python 為主)
  • 協助企業架設電商網站
  • 多年軟體開發實務經驗(皆以 python 為主)

回覆與作業設計

  • 作業設計部分:我們會有選擇題與是非題和數學計算題的作業設計,聚焦於資料結構和演算法的基礎觀念,幫助各位釐清觀念,還有抓到細節上的盲點!
  • 平均每天都會回答同學問題!
  • 平均每個禮拜都會批改一次作業!

課前貼心提醒

各位不用擔心有任何問題不清楚,或解題有困難,歡迎隨時到課程留言區留言發問,老師會不定時來解決各位遇到的問題!

哪些人適合這堂課?
1. 有轉職軟體工程師念頭,但覺得無法通過面試白板題的人 2. 看過散落網路文章,但總覺得學得沒有系統,且過多文字贅述的人 3. 想要挑戰外商或高薪軟體工程師,但已經忘記資料結構與演算法的人 4. 非本科畢業,想補齊演算法與資料結構能力的人 5. 想學演算法,但不想讀厚厚的演算法書籍理論的人
你可以學到
1. 能清楚了解資料結構和演算法概念 2. 能獨立解出 Leetcode 基本題目 3. 能獨立分析程式並且用資料結構和演算法優化它
上課前的準備
需要準備的工具 / 軟體(若購買課程前不清楚版本是否支援,請先留言與老師確認。)
【需求工具】一台電腦(Windows、Mac、Linux 平台均可) 【需求軟體】一般上網瀏覽器(google chrome 等皆可),因為練習平台都是線上編輯器,不需要安裝任何程式或特別軟體,且各個作業系統都可以使用!
需要具備的背景知識
1. 不需具備任何資料結構或演算法基礎 2. 你只需要基本 Python 概念(知道變數、if 判斷式、for. while 迴圈還有函式概念等,以及寫過一些小程式即可)
單元一覽
10 章 72 單元|總時長 395 分鐘
全部展開
1
基本資料結構演算法觀念時間複雜度 (BigO)
影片單元
單元 1 - 為什麼要學資料結構和演算法?為什麼要刷題?
03:30
影片單元
單元 2 - 什麼是資料結構和演算法
01:58
影片單元
單元 3 - 如何分析演算法:時間複雜度 (BigO) 觀念和計算
07:39
影片單元
單元 4 - 如何分析演算法:時間複雜度圖表和空間複雜度觀念和計算
04:53
影片單元
單元 5 - 刷題 (Leetcode) 必備觀念
02:42
影片單元
單元 6 - (補充)Leetcode基本操作介面介紹講解
04:56
2
陣列(Array)
影片單元
單元 1 - 陣列(Array) 圖解基本概念和常用技巧&時間複雜度
06:29
影片單元
單元 2 - python 實作基本操作Array(新增、刪除、查找、建立等)
03:54
影片單元
單元 3 - 陣列Leetcode 題目實戰練習
08:46
3
雜湊 (Hash)
影片單元
單元 1 - Hash Table 雜湊表簡介&mapping 映射簡介
01:27
影片單元
單元 2 - 什麼是Hash Table (雜湊表) 和Hash Function(雜湊函數)
01:52
影片單元
單元 3 - Hash Function(雜湊函數)運作簡介
01:34
影片單元
單元 4 - Hash Table 的碰撞和解決方法
02:22
影片單元
單元 5 - Hash Table 的時間複雜度以及在python 中的形式
03:44
影片單元
單元 6 - Hash Table雜湊表的優缺點
01:18
影片單元
單元 7 - Hash Table 程式碼實作(python)
10:27
影片單元
單元 8 - Leetcode 題目實戰練習(1)-217. Contains Duplicate
04:43
影片單元
單元 9 - Leetcode 題目實戰練習(2)-442. Find All Duplicates in an Array
05:54
影片單元
單元 10 - Leetcode 題目實戰練習(3)-1512. Number of Good Pairs
07:10
影片單元
單元 11 - Leetcode 題目實戰練習(4)-242. Valid Anagram
07:34
影片單元
單元 12 - Leetcode 題目實戰練習(5)-1.Two Sum
09:06
4
堆疊 (stack)
影片單元
單元 1 - 堆疊 (stack) 圖解核心概念
02:13
影片單元
單元 2 - 堆疊的重要操作&堆疊時間複雜度
04:47
影片單元
單元 3 - python 實作建立堆疊
02:41
影片單元
單元 4 - 用鏈結串列建立堆疊(建議學習完鏈結串列單元再來觀看)
02:03
影片單元
單元 5 - Leetcode 題目實戰練習(1)-20.Valid Parentheses
12:55
影片單元
單元 6 - Leetcode 題目實戰練習(2)-150. Evaluate Reverse Polish Notation
08:16
5
佇列 (Queue)
影片單元
單元 1 - 佇列 (queue) 圖解核心概念和操作&時間複雜度
05:06
影片單元
單元 2 - HashTable、stack、queue和array的比較
01:18
影片單元
單元 3 - python 實作建立佇列
05:05
影片單元
單元 4 - Leetcode 題目實戰練習(1)-933. Number of Recent Calls
09:22
6
鏈結串列 (Linked List)
影片單元
單元 1 - 鏈結串列 (Linked List) 圖解概念介紹
影片單元
單元 2 - 鏈結串列和與陣列的差異&時間複雜度
08:27
影片單元
單元 3 - 建立鏈結串列的節點類別&python實作
10:10
影片單元
單元 4 - python實作:遍歷鏈結串列
06:16
影片單元
單元 5 - python實作:在鏈結串列中查找節點資料
03:15
影片單元
單元 6 - python實作:在鏈結串列中插入一個新的節點。
05:11
影片單元
單元 7 - python實作:從鏈結串列中刪除一個節點
08:50
影片單元
單元 8 - 雙向鏈結串列和環狀鏈結串列概念
02:19
影片單元
單元 9 - Leetcode 題目實戰練習(1)-203. Remove Linked List Elements
10:23
影片單元
單元 10 - Leetcode 題目實戰練習(2)-876.Middle of the Linked List
05:09
影片單元
單元 11 - Leetcode 題目實戰練習(3)-141. Linked List Cycle
06:53
影片單元
單元 12 - Leetcode 題目實戰練習(4)-206. Reverse Linked List
06:12
影片單元
單元 13 - Leetcode 題目實戰練習(5)-21. Merge Two Sorted List
07:14
7
迴圈迭代 (Iteration) 和遞迴 (Recursion)
影片單元
單元 1 - 遞迴 (Recursion) 圖解重要概念&階乘遞迴概念
04:00
影片單元
單元 2 - 遞迴(recursion)和堆疊(stack)的關係
04:26
影片單元
單元 3 - 迭代 (Iteration) 圖解重要概念&遞迴和迭代的比較
03:20
影片單元
單元 4 - python 實作迴圈和遞迴(以費氏數列為例)
08:52
影片單元
單元 5 - 二分查找遞迴概念
04:03
影片單元
單元 6 - Leetcode 題目實戰練習(1)-344. Reverse String
05:36
8
樹(Tree)
影片單元
單元 1 - 樹 (Tree) 圖解概念介紹
03:53
影片單元
單元 2 - 樹的重要概念與術語:父子節點、高度深度等
03:27
影片單元
單元 3 - 樹(tree)的種類和差異性
06:30
影片單元
單元 4 - python 實作建立樹
07:56
影片單元
單元 5 - 用鏈結串列和陣列來建立樹的差別
01:32
影片單元
單元 6 - Leetcode題目實戰練習(1)(此題建議二元樹章節學習完再看)-590. N-ary Tree Postorder Traversal
04:42
作業單元
作業 1 - 樹 (Tree) 作業
查看作業
9
二元樹 (Binary Tree)
影片單元
單元 1 - 二元樹 (Binary Tree) 圖解概念介紹&python實作二元樹
04:34
影片單元
單元 2 - BFS(廣度優先走訪)和層序走訪 (Level-order Traversal) 觀念&python實作
09:22
影片單元
單元 3 - DFS(深度優先走訪) 觀念&python實作
11:17
影片單元
單元 4 - 二元樹的前、中、後序走訪&python實作
07:07
影片單元
單元 5 - Leetcode 題目實戰練習(1)-102. Binary Tree Level Order Traversal
09:11
影片單元
單元 6 - Leetcode 題目實戰練習(2)-107. Binary Tree Level Order Traversal II
04:51
影片單元
單元 7 - Leetcode 題目實戰練習(3)-637. Average of Levels in Binary
05:52
影片單元
單元 8 - Leetcode 題目實戰練習(4)-104. Maximum Depth of Binary Tree
04:04
影片單元
單元 9 - Leetcode 題目實戰練習(5)-144. Binary Tree Preorder Traversal
影片單元
單元 10 - Leetcode 題目實戰練習(6)-226. Invert Binary Tree
06:49
作業單元
作業 1 - 二元樹 (Tree) 作業
查看作業
10
二元搜尋樹 (Binary Search Tree)
影片單元
單元 1 - 二元搜尋樹 (Binary Search Tree ) 圖解概念介紹&時間複雜度
02:46
影片單元
單元 2 - 二元搜尋樹(binary search tree )的建立和新增資料
07:03
影片單元
單元 3 - 二元搜尋樹(Binary search tree)搜尋資料&python實作
03:30
影片單元
單元 4 - 二元搜尋樹DFS深度優先走訪(前、中、後序)&python實作
02:53
影片單元
單元 5 - 二元搜尋樹BFS廣度優先走訪&python實作
04:37
影片單元
單元 6 - Leetcode 題目實戰練習(1)-938. Range Sum of BST
05:37
試看單元
播放試看影片
章節 6 - 鏈結串列 (Linked List)
單元 1 - 鏈結串列 (Linked List) 圖解概念介紹
試看影片
03:18
播放試看影片
章節 9 - 二元樹 (Binary Tree)
單元 9 - Leetcode 題目實戰練習(5)-144. Binary Tree Preorder Traversal
試看影片
08:20
課程評價
4.8
/ 5.0
27 則評價
蔡耿全2024-07-05
課程由淺入深 講解清楚 搭配圖示明暸
感謝老師這麼細心講解,讓原本艱澀困難的資料結構也能讓我們有初步的了解並奠定基礎,使我們未來編寫Python或其他程式語言,有更大的信心!
2 人覺得有幫助
daniel8302212023-12-08
初學者也能聽懂的課程
很適合給初學者入門,我自己也是初學者,講師對於原理及例題講解都很詳細,並且圖示演算法很有邏輯,有助於新手學習!
1 人覺得有幫助
chen484872024-01-21
超快上手基礎資料結構
老師教學內容很好吸收,觀念講解完馬上進入練習完全不怕不會應用,是一堂兼具理論與實務的入門課程 ! 推推 !
1 人覺得有幫助
paul chao2024-10-05
非常好懂
老師講解得很清楚 希望之後有leetcode上其他主題的課程 例如Greedy 也是滿常出現的
Chris
授課老師
2024-10-20
之後會繼續出相關課程哦!也會有社群可以互相討論
查看更多
1 人覺得有幫助
寫真2024-04-13
淺顯易懂
看了很多演算法課程 這個是講的最清楚的 很多原本似懂非懂的觀念 經由老師的講解忽然茅塞頓開
1 人覺得有幫助

意猶未盡嗎?

關於講師

Chris
3堂課程
0篇文章
541位學生
大家好,我是Chris,是一名軟體工程師,曾在新創科技公司進行軟體專案開發,也曾在資訊競賽拿下全國第二與佳作等成績,並在參與過許多研究計畫,還有自行和廠商接案架設電商網站等等,累積許多SideProject ,同時也對資料結構與演算法有非常大的興趣,打過程式競賽,也寫了數百題的Leetcode,有一定的經驗。並以python實作不少專案,包括大數據分析,機器學習,以及語音辨識領域。在進修過程中慢慢領悟一套學習心法,能理解想進入資訊領域的新手面臨的障礙,並能跳脫工程師思維,不把硬梆梆的內容丟給大家,而是用人人聽得懂的方式教會你寫程式,讓各位能夠成功轉職踏入工程師的大家庭!
前往講師頁面
精選學生作業

購課前問答

日期最新
日期最新
日期最舊
愛心數
黃厚捷
2024-02-06
想請問我本身是學 JAVA 的適合上這堂課嗎? 以 JAVA 的語法觀念可以跟上這堂課的內容嗎?
Chris
授課老師
2024-02-06
JAVA也有物件導向的概念(課程會用到),以及基本的程式邏輯: if else for function 是一樣的 唯有java的語法寫法可能跟python不一樣,但是課程要求的python程度不會很高(可以快速學會),建議可能先上youtube學一下基本的python語法,會更好地吸收理解! 如果是要用java寫leetcode的話,核心邏輯概念是相同的,只是一些語法上面就需要換成java的方式而已,
(已編輯)
回覆
我也想問
Charlie Ed
2023-10-29
hey,老師 一、課程只能完成98%,是因為作業還沒改嗎?這樣拿不到完課證明 二、老師是否有GitHub、Leetcode、Blog,帳號可以提供參考其他題目的解題思路?
Chris
授課老師
2023-10-30
先感謝同學的回覆!不好意思,作業那邊沒有看到通知,現在已經立刻批改完畢了! 另外,其他題目的解題思路,也和課後討論區一起正在規劃,之後可能會提供Blog或是hackMD的筆記本,裡面會有更多的題目解題思路和圖片!
Chris
授課老師
2023-11-01
同學你好,昨天有幫您詢問hahow,可能需要麻煩您確認是否每一堂課程單元觀看狀況為打勾,進度才會判斷為完成哦~ 完成進度不會因為老師批改與否而影響,只要同學繳交送出就會計算完成進度呦!再麻煩您確認一下了!謝謝
(已編輯)
Charlie Ed
2023-11-02
已經確認每堂課都有打勾,但還是顯示98%... 要怎麼跟hahow的後台 或者客服確認呢?
Chris
授課老師
2023-11-03
平台的網頁右下角有一個綠色的圓圈,那個可以跟客服中心溝通呦
回覆
我也想問
python860702
2023-10-27
先謝謝老師的快速回答我的問題! 請問老師,我目前懂python的基礎,資料結構的內容也是略懂 但是反覆看完"單元 9 - Leetcode 題目實戰練習(5)-144. Binary Tree Preorder Traversal" 還是沒辦法理解為什麼這樣的程式碼是解答,請問在正課的時候會有其他投影片或是方式加以說明嗎? (有辦法自己在自己的環境當中做測試嗎? 例如說實際丟資料給他,看看運行的過程,不然我沒辦法想像整個過程)
Chris
授課老師
2023-10-29
感謝您的回覆,正課的部分會有更多的解釋,例如在第九章的單元三和單元四分別會講述DFS概念,和前中後續走訪概念,這個都是解"單元 9"這個題目的基礎,同時此題目也有遞迴的概念,在更前面的第七章節遞迴和迭代,也有深入講解遞迴的概念! 如果最後還是不清楚的話,可以寄Email給我,我再找寫資料給你幫助你理解! Email: kingcall550102@gmail.com
(已編輯)
python860702
2023-10-31
謝謝老師! 我已經購買課程了 之後碰到問題要再麻煩跟老師請教了!
回覆
我也想問
python860702
2023-10-27
請問這堂課整堂課程都有提供字幕嗎?
Chris
授課老師
2023-10-27
沒錯,整堂課程都有完整字幕!
回覆
我也想問
python860702
2023-10-27
老師你好,請問這堂課主要使用的語言是python嗎?
Chris
授課老師
2023-10-27
是的!全部都使用python語言
回覆
我也想問
購買單堂課

NT$2,450
有什麼優惠可以用?
小蛙幫你找最佳優惠
登入看看 有什麼優惠用