100 多個 DSA 面試問題,用於破解 FAANG,並配有動畫示例,以便更深入地理解和更快地學習
從這 44.5 小時的課程,你會學到
- 學習、實作並使用不同的資料結構
- 學習、實施和使用不同的演算法
- 掌握電腦科學基礎知識,成為更好的開發人員
- 學習應對艱難編碼面試所需的一切
- 破解編碼面試難題,100 多個問題及解釋
- 資料結構和演算法的時間和空間複雜度
- 遞迴( Recursion )
- 大O ( Big O )

要求
基本 Python 程式設計技能
課程說明
歡迎來到完整的 Python 資料結構和演算法訓練營,這是網路上最現代、最完整的 Python 資料結構和演算法課程。
這是最全面的線上課程,超過 40 小時,可幫助您順利通過程式設計面試並了解 Python 中的資料結構和演算法。您將看到蘋果、亞馬遜、谷歌和微軟等頂尖科技公司提出的 100 多個面試問題,以及如何透過全面的視覺解釋視訊資料面對面試,這將使您更接近獲得夢想中的技術工作!
學習 Python 是提高職業前景的最快方法之一,因為它是最需要的技術技能之一!本課程將幫助您更好地理解資料結構的每個細節以及如何在高階程式語言中實作演算法。
我們將透過引人入勝的影片教學逐步指導您,並教您成為專業程式設計師所需的一切。
完成本課程後,您將能夠:
學習貪婪演算法、二分查找、排序和動態規劃等基本演算法技術來解決程式設計難題。
了解各種資料結構的優缺點,以便為您的資料和應用程式選擇最佳的資料結構
學習許多常用於對資料進行排序的演算法,以便您的應用程式在對大型資料集進行排序時能夠有效地運行
了解如何應用圖形和字串演算法來解決現實世界的挑戰:在巨大的地圖上找到最短路徑並從數百萬個片段中組裝基因組。
為什麼這門課程如此特殊並且與其他線上資源不同?
本課程將帶您從零開始理解資料結構和演算法的非常複雜和高級的主題!
您將獲得視訊講座,在整個課程中清晰地解釋概念並提供全面的視覺解釋。
您還將看到 Apple、Amazon、Google 和 Microsoft 等頂尖科技公司的面試問題。
我會介紹您需要了解的有關技術面試流程的所有內容!
因此,無論你有興趣深入學習世界上頂尖的程式語言
並且有興趣學習構成每個有成就的程式設計師/設計師或軟體架構師的核心基礎技能的基本演算法、資料結構和效能分析,並很高興在下一次技術面試中取得優異成績,這是適合您的課程!
以下是您今天註冊後可獲得的福利:
終身存取 40 多小時的高解析度品質影片。無需每月訂閱。隨時隨地以自己的步調學習
無論何時您有疑問或遇到困難,課程問答中都會提供友好而快速的支持
30 天內全額退款保證!
本課程適合哪些人?
自學成才的程式設計師,擁有 Python 基礎知識,希望成為資料結構和演算法的專業人士,並開始參加技術職位的面試!
以及目前就讀電腦科學專業的學生,想要補充資料結構和演算法的資料以及畢業後面試的準備!
以及需要練習以應對即將到來的編碼面試的專業程式設計師。
最後,任何有興趣了解更多有關資料結構和演算法或技術面試流程的人都可以!
本課程旨在幫助您實現職業目標。無論您是想進一步了解資料結構和演算法、提高收入潛力還是只是想要一份更自由的工作,這都是適合您的課程!
本課程涵蓋的主題 :
第 1 節 – 簡介
- 什麼是資料結構?
- 什麼是演算法?
- 為什麼資料結構和演算法很重要?
- 資料結構的類型
- 演算法的類型
第 2 節 – 遞迴
- 什麼是遞迴?
- 為什麼我們需要遞迴?
- 遞歸如何運作?
- 遞迴與迭代解決方案
- 何時使用/避免遞迴?
- 如何用 3 個步驟寫遞迴?
- 如何使用遞迴來尋找斐波那契數( Fibonacci numbers )?
第 3 節 – 破解遞歸面試問題
- 問題 1 – 數字總和
- 問題 2 – 乘冪( power )
- 問題 3 – 最大公約數
- 問題 4 – 十進制轉二進制
第 4 節 – 獎勵挑戰遞歸問題(練習)
- 乘冪( power )
- 階乘 ( factorial,如 5 的階乘為 5! =5x4x3x2x1=120 )
- 陣列乘積( productofArray )
- 遞歸範圍( recursiveRange )
- fib
- 反向( reverse )
- 回文( isPalindrome )
- someRecursive
- 壓平( flatten )
- 大寫字母( captalizeFirst )
- 巢狀偶數和( nestedEvenSum )
- 大寫單字( capitalizeWords )
- 字串化數字( stringifyNumbers )
- 收集字串( collectStrings )
第 5 節 – 大 O 符號
- 類比與時間複雜度
- 大 O、大 Theta 和大 Omega
- 時間複雜度範例
- 空間複雜度
- 刪除常數和非主導項
- 加法與乘法
- 如何用Big O來測量程式碼?
- 如何找到遞歸呼叫的時間複雜度?
- 如何測量多次調用的遞歸演算法?
第 6 節 – 十大 Big O 面試問題(亞馬遜、Facebook、蘋果和微軟)
- 乘積( product )與和( sum )
- 列印對( Print Pairs )
- 列印無序對( Print Unordered Pairs )
- 列印無序對 2 陣列( Print Unordered Pairs 2 Arrays )
- 列印無序對 2 陣列 100000 個單位
- 反向( Reverse )
- O(N) 等價類
- 階乘複雜度
- 斐波那契複雜性( Fibonacci Complexity )
- 2 的乘冪( power of 2 )
第 7 節 – 陣列( array )
- 什麼是陣列?
- 陣列類型
- 記憶體中的陣列
- 建立陣列
- 插入操作
- 遍歷操作
- 存取陣列元素
- 在陣列中搜尋元素
- 從陣列中刪除元素
- 一維陣列的時間與空間複雜度
- 一維陣列練習
- 建立二維陣列
- 插入 – 二維陣列
- 存取二維陣列的元素
- 遍歷 – 二維陣列
- 在二維陣列中搜尋元素
- 刪除 – 二維陣列
- 二維陣列的時間和空間複雜度
- 何時使用/避免使用陣列
第 8 節 – Python 列表
- 什麼是列表?如何創建它?
- 訪問/遍歷列表( Traversing a list )
- 更新/插入列表
- 從清單中切片/
- 在清單中搜尋元素
- 列表操作/功能
- 列表和字串
- 常見的列表陷阱及其避免方法
- 列表與陣列
- 列表的時間和空間複雜度
- 列出面試問題
第 9 節 – 破解數組/列表面試問題(亞馬遜、Facebook、蘋果和微軟)
- 問題 1 – 缺失數字
- 問題 2 – 配對
- 問題 3 – 在陣列中尋找數字
- 問題 4 – 兩個整數的最大乘積
- 問題 5 – 是否唯一
- 問題 6 – 排列
- 問題 7 – 旋轉矩陣
第 10 節 – 具有挑戰性的陣列/列表問題(練習)
- 中間函數( middle function )
- 2D 列表
- 最佳計分( score )
- 缺失的號碼
- 重複的號碼
- 對子( pairs )
第 11 節 – 字典 ( Dictionaries )
- 什麼是字典?
- 創建字典
- 記憶中的字典
- 在字典中插入/更新元素
- 遍歷字典
- 在字典中搜尋元素
- 從字典中刪除元素
- 字典方法
- 字典操作/內建函數
- 字典與列表
- 字典的時間與空間複雜度
- 字典面試問題
第 12 節 – 元組 ( Tuples )
- 什麼是元組?如何創建它?
- 記憶體中的元組 / 存取元組的元素
- 遍歷元組
- 在 Tuple 中搜尋元素
- 元組操作/函數
- 元組與列表
- 元組的時間與空間複雜度
- 元組問題
第 13 節 – 連結列表( Linked List )
- 什麼是連結列表?
- 連結列表與陣列
- 連結列表的類型
- 記憶體中的連結列表
- 建立單一連結列表( Single Linked List )
- 記憶體中單一連結列表的插入
- 單一連結列表插入演算法
- 單一連結列表中的插入方法
- 單一連結列表的遍歷
- 在單一連結列表中搜尋值
- 從單一連結列表中刪除節點
- 單一連結列表中的刪除方法
- 刪除整個單一連結列表
- 單一連結列表的時間與空間複雜度
第 14 節 – 循環單一連結列表
- 建立循環單一連結列表
- 循環單一連結列表中的插入
- 循環單一連結列表中的插入演算法
- 循環單一連結列表中的插入方法
- 循環單一連結列表的遍歷
- 在循環單一連結列表中搜尋節點
- 從循環單一連結列表中刪除節點
- 循環單一連結列表的刪除演算法
- 循環單一連結列表中的方法
- 刪除整個循環單一連結列表
- 循環單一連結列表的時間和空間複雜度
第 15 節 – 雙向連結列表
- 建立雙向連結列表
- 雙向連結列表中的插入
- 雙向連結列表中的插入演算法
- 雙向連結列表中的插入方法
- 雙向連結列表的遍歷
- 雙向連結列表的反向遍歷
- 在雙向連結列表中搜尋節點
- 刪除雙向連結列表中的節點
- 雙向連結列表的刪除演算法
- 雙向連結列表的刪除方法
- 刪除整個雙向連結列表
- 雙向連結列表的時間和空間複雜度
第 16 節 – 循環雙向連結列表
- 建立循環雙向連結列表
- 循環雙向連結列表中的插入
- 循環雙向連結列表中的插入演算法
- 循環雙向連結列表中的插入方法
- 循環雙向連結列表的遍歷
- 循環雙向連結列表的反向遍歷
- 在循環雙向連結列表中搜尋節點
- 從循環雙向連結列表中刪除一個節點
- 循環雙向連結列表的刪除演算法
- 循環雙向連結列表中的刪除方法
- 整個循環雙向連結列表
- 循環雙向連結列表的時間和空間複雜度
- 連結列表與陣列的時間複雜度
第 17 節 – 破解連結列表面試題(亞馬遜、Facebook、蘋果和微軟)
- 連結列表類
- 問題 1 – 刪除重複項
- 問題 2 – 返回第 K 個到最後一個
- 問題 3 – 分區
- 問題 4 – 連結列表求和
- 問題 5 – 交叉口
第 18 節 – 堆疊( Stack )
- 什麼是堆疊?
- 堆疊操作
- 使用清單建立堆疊,不受大小限制
- 使用清單對堆疊進行操作(推送、彈出、檢視、isEmpty、)
- 建立具有限制的堆疊(彈出、推播、檢視、isFull、isEmpty、)
- 使用連結列表建立堆疊
- 使用連結清單對堆疊進行操作(彈出、推播、檢視、isEmpty、)
- 使用連結列表的堆疊的時間和空間複雜度
- 何時使用/避免使用 Stack
- 堆疊測驗
第 19 節 – 佇列( Queue )
- 什麼是佇列?
- 使用 Python 列表進行排隊 – 沒有大小限制
- 使用 Python 清單進行排隊 – 沒有大小限制,操作(入隊、出隊、查看)
- 循環佇列 – Python 列表
- 循環佇列 – Python 列表,操作(入隊,出隊,查看)
- 佇列 – 連結列表
- 佇列 – 連結列表,操作(創建,入隊)
- 佇列 – 連結列表,操作(Dequeue()、isEmpty、Peek)
- 使用連結列表的佇列的時間和空間複雜度
- 列表與連結列表的實現
- 收藏模組
- 佇列模組
- 多處理模組
第 20 節 – 破解堆疊和佇列面試問題(亞馬遜、Facebook、蘋果、微軟)
- 問題 1 – 三位一體
- 問題 2 – 堆疊最小值
- 問題 3 – 盤子堆
- 問題 4 – 透過堆疊進行排隊
- 問題 5 – 動物收容所
第 21 節 – 樹 / 二元樹( Binary Tree )
- 什麼是樹?
- 為什麼是樹?
- 樹術語
- 如何在 Python 中建立一棵基本樹?
- 二元樹
- 二元樹的類型
- 二元樹表示
- 建立二元樹(連結列表)
- 先序遍歷二元樹(連結列表)
- 中序遍歷二元樹(連結列表)
- 郵編遍歷二元樹(連結列表)
- 層序遍歷二元樹(連結列表)
- 在二元樹(連結列表)中搜尋節點
- 在二元樹(連結列表)插入節點
- 從二元樹(連結列表)中刪除一個節點
- 刪除整個二元樹(連結列表)
- 建立二元樹(Python 清單)
- 插入值二叉樹(Python 列表)
- 在二元樹中搜尋節點(Python 列表)
- 先序遍歷二元樹(Python 列表)
- 中序遍歷二元樹(Python 清單)
- 後序遍歷二元樹(Python 列表)
- 層次遍歷二元樹(Python 列表)
- 從二元樹中刪除一個節點(Python 清單)
- 整個二元樹(Python 列表)
- 連結列表與 Python 列表二元樹
第 22 節 – 二元搜尋樹( Binary Search Tree )
- 什麼是二元搜尋樹?我們為什麼需要它?
- 建立二元搜尋樹
- 在 BST 中插入節點
- 遍歷 BST
- 在 BST 中搜尋
- 從 BST 中刪除節點
- 刪除整個 BST
- BST的時間與空間複雜度
第 23 節 – AVL 樹
- 什麼是 AVL 樹?
- 為什麼是 AVL 樹?
- AVL 樹的常見操作
- 在 AVL 中插入一個節點(左左條件)
- 在 AVL(左右條件)插入一個節點
- 在 AVL 中插入一個節點(右右條件)
- 在 AVL 中插入節點(右左條件)
- 在 AVL 中插入節點(全部一起)
- 在 AVL 中插入節點(方法)
- 從 AVL (LL, LR, RR, RL) 移除一個節點
- 從 AVL 中刪除一個節點(全部刪除)
- 從 AVL 中刪除節點(方法)
- 刪除整個 AVL
- AVL 樹的時間與空間複雜度
第 24 節 – 二元堆 ( Binary Heap )
- 什麼是二元堆?我們為什麼需要它?
- 二元堆的常見操作(建立、檢視、sizeofheap)
- 在二元堆中插入一個節點
- 從二元堆中提取一個節點
- 刪除整個二元堆
- 二元堆的時間和空間複雜度
第 25 節 – Trie
- 什麼是 Trie?我們為什麼需要它?
- Trie 的常見動作(建立)
- 在 Trie 中插入字串
- 在 Trie 中搜尋字串
- 從 Trie 中刪除一個字串
- Trie 的實際應用
第 26 節 – 雜湊 ( Hashing )
- 什麼是 Hashing?我們為什麼需要它?
- Hashing 術語
- Hash 函數
- 碰撞解決技術的類型
- Hash 表已滿
- 解析技術的優缺點
- Hashing 的實際用途
- Hashing 與其他資料結構
第 27 節 – 排序演算法
- 什麼是排序?
- 排序類型
- 術語排序
- 泡泡排序( Bubble Sort )
- 選擇排序( Selection Sort )
- 插入排序( Insertion Sort )
- 桶排序( Bucket Sort )
- 歸併排序( Merge Sort )
- 快速排序( Quick Sort )
- 堆排序( Heap Sort )
- 排序演算法的比較
第 28 節 – 搜尋演算法
- 搜尋演算法簡介
- 線性搜尋
- Python中的線性搜尋
- 二元搜尋( Binary Search )
- Python 中的二元搜尋
- 二元搜尋的時間複雜度
第 29 節 – 圖形( graph )演算法
- 什麼是圖表?為什麼要使用 Graph?
- 圖形術語
- 圖表類型
- 圖形表示
- 使用 Python 建立圖形
- 圖遍歷 – BFS
- Python 實踐 BFS 遍歷
- 圖遍歷 – DFS
- Python 實踐 DFS 遍歷
- BFS 遍歷與 DFS 遍歷
- 拓撲排序
- 拓撲排序演算法
- Python 實踐拓樸排序
- 單源最短路徑問題(Single Source Shortest Path Problem,SSSPP)
- 單源最短路徑問題 (SSSPP) 的 BFS
- Python 中單源最短路徑問題 (SSSPP) 的 BFS
- 為什麼 BFS 不適用於加權圖( weighted Graphs )?
- 為什麼 DFS 不適用於 SSSP?
- Dijkstra 的 SSSP 演算法
- Python 實踐 Dijkstra 演算法
- 具有負循環的 Dijkstra演算法
- Bellman Ford 演算法
- 具有負循環( negative cycle )的Bellman Ford演算法
- 為什麼 Bellman Ford 會運行 V-1 時間?
- Python 語言中的 Bellman Ford
- BFS 對 Dijkstra 對上 Bellman Ford
- 所有對最短路徑問題
- 所有對最短路徑的試運行
- Floyd Warshall 演算法
- 為什麼用 Floyd Warshall (佛洛伊德沃歇爾) ?
- 具負循環的 Floyd Warshall (佛洛伊德沃歇爾)
- Python 實踐 Floyd Warshall ,
- BFS vs Dijkstra vs Bellman Ford vs Floyd Warshall
- 最小生成樹( Minimum Spanning Tree )
- 不相交集 ( Disjoint Set )
- Python 中的不相交集
- Kruskal 演算法
- Python 實踐 Kruskal 演算法
- Prim 演算法
- Python 實踐 Prim 演算法
- Prim 對 Kruskal
第 30 節 – 貪婪演算法
- 什麼是貪婪演算法?
- 眾所周知的貪婪演算法
- 活動選擇問題
- Python 中的活動選擇問題
- 硬幣找零問題
- Python中的硬幣找零問題( Coin Change Problem )
- 分數背包問題( Fractional Knapsack Problem )
- Python 中的分數背包問題
第 31 節 – 分治演算法
- 什麼是分治演算法?
- 常見的分而治之演算法
- 如何使用分而治之的方法來解決斐波那契數列?
- 數量因子
- Python 中的數位因子
- 入室竊盜
- Python 實踐入室搶劫問題
- 將一個字串轉換為另一個字串
- 在 Python 中將一個字串轉換為另一個字串
- 零一背包問題
- 零一 Python 的背包問題
- 最長公共序列問題
- Python 實踐最長的公共子序列
- 最長回文子序列問題
- Python 實踐最長回文子序列
- 到達最後一個單元格的最小成本問題
- 使用 Python 到達二維數組中最後一個單元格的最小成本
- 給定成本到達最後一個單元格的方法數
- Python 中給定成本到達最後一個單元格的方法數
第 32 節 – 動態規劃( Dynamic Programming )
- 什麼是動態規劃? (重疊屬性)
- DC 這個名字是怎麼來的呢?
- 自上而下進行記憶
- 使用製表符進行自下而上
- 自上而下與自下而上
- 歸併排序是動態規劃嗎?
- 使用動態規劃的數位因子問題
- 數字因素:自上而下與自下而上
- 使用動態規劃解決入屋搶劫問題
- 入室盜竊:自上而下與自下而上
- 使用動態規劃將一個字串轉換為另一個字串
- 使用 Bottom Up 轉換字串
- 使用動態規劃實現零一背包( Zero One Knapsack )
- 零一背包 – 由上而下
- 零一背包 – 自下而上
第 33 節 – 挑戰動態規劃問題
- 最長重複子序列長度問題
- 最長公共子序列長度問題
- 最長公共子序列問題
- 差異實用程式
- 最短公共子序列問題
- 最長回文子序列的長度
- 子集和問題
- 雞蛋掉落謎題
- 最大長度鏈對
第 34 節 – 解決問題的秘訣
- 介紹
- 步驟 1 – 了解問題
- 第 2 步 – 範例
- 步驟 3 – 分解
- 步驟 4 – 解決或簡化
- 第 5 步 – 回顧與重構
目標受眾
- 任何有興趣了解更多有關資料結構和演算法或技術面試流程的人!
- 自學成才的程式設計師,擁有 Python 基礎知識,希望成為資料結構和演算法的專業人士,並開始參加技術職位的面試!
- 目前就讀電腦專業的學生,需要資料結構和演算法的補充資料以及畢業後的面試準備!
- 需要練習以應對即將到來的編碼面試的專業程式設計師。
講師簡介
Elshad Karimov 軟體開發人員和首席講師
我是 Elshad Karimov,是一名軟體開發人員、線上講師、部落客和《Swift 中的資料結構和演算法》一書的作者。我擁有超過 10 年的軟體開發經驗,精通 Python 和 Java 以及 Oracle PL/SQL、Swift 和 C#。我曾在多家公司工作,開發過多種財務和計費軟體的擴充程式。我已經使用 Unity 和行動應用程式開發了多款用於不同目的的遊戲。
字幕:簡中、英文
- 想要了解如何將英文字幕自動翻譯成中文? 請參考這篇 How-To
- Udemy 永久擁有課程 限時優惠中 約NT330(點擊連結看更多)
- ✨年訂閱每月 NT350 🌈 悠遊 Udemy 的 26000+ 門課,最大化學習 ( 原價 NT635/月 )
- Udemy 現在越來越多課程有中文字幕,請參考 Soft & Share 中文線上課程
- 手機上點選優惠連結看到的價格比電腦上看到的貴
- $代表當地貨幣, 如在台灣為 NT
- 點選”報名參加課程”有可能因瀏覽器 cookies 轉久一點或回報錯誤而無法連上,請稍等刷新或重新點選就會出現
報名參加課程

也許你會有興趣
- 演算法與資料結構相關線上課程
- ★英語學習地圖 – 練好英文是最大的學習槓桿
- 如何找工作學習地圖 – 找工作不要靠運氣!
- 從 Soft & Share 各種社團頻道挑選你喜歡的加入
發表迴響