leetcode演算法課程
第1章 演算法面試到底是什麼鬼?
一提起演算法面試,很多同學就會心有餘悸。可其實,大多數企業的演算法面試,並沒有那麼可怕。並不是一定要啃完整本《演算法導論》,才能玩兒轉演算法面試;也並不是只有ACM參賽選手,才能笑傲演算法面試。恰恰相反,大多數演算法面試關注的演算法思維,其實很基礎。在這一章,和大家聊一聊,演算法面試,到底是什麼鬼?…
1-1 演算法面試不僅僅是正確的回答問題
1-2 演算法面試只是面試的一部分
1-3 如何準備演算法面試
1-4 如何回答演算法面試問題
第2章 面試中的複雜度分析
很多同學一提起復雜度分析就頭疼,馬上想起了《演算法導論》中複雜的數學推導。但其實在一般的企業面試中,對複雜度的分析要求並沒有那麼高,但也是繞不過去的坎兒。在這一章,和大家介紹一下,面試中需要掌握的複雜度分析。…
2-1 究竟什麼是大O(Big O)
2-2 對資料規模有一個概念
2-3 簡單的複雜度分析
2-4 親自試驗自己演算法的時間複雜度
2-5 遞迴演算法的複雜度分析
2-6 均攤時間複雜度分析(Amortized Time Analysis)
2-7 避免複雜度的震盪
第3章 陣列中的問題其實最常見
面試中的演算法問題,有很多並不需要複雜的資料結構支撐。就是用陣列,就能考察出很多東西了。其實,經典的排序問題,二分搜尋等等問題,就是在陣列這種最基礎的結構中處理問題的。在這一章中,我們學習常見的陣列中處理問題的方法。…
3-1 從二分查詢法看如何寫出正確的程式
3-2 改變變數定義,依然可以寫出正確的演算法
3-3 在LeetCode上解決第一個問題 Move Zeros
3-4 即使簡單的問題,也有很多優化的思路
3-5 三路快排partition思路的應用 Sort Color
3-6 對撞指標 Two Sum II - Input Array is Sorted
3-7 滑動視窗 Minimum Size Subarray Sum
3-8 在滑動視窗中做記錄 Longest Substring Without Repeating Characters
第4章 查詢表相關問題
查詢,是使用計算機處理問題時的一個最基本的任務,因此也是面試中非常常見的一類問題。很多演算法問題的本質,就是要能夠高效查詢。學會使用系統庫中的map和set,就已經成功了一半。
4-1 set的使用 Intersection of Two Arrays
4-2 map的使用 Intersection of Two Arrays II
4-3 set和map不同底層實現的區別
4-4 使用查詢表的經典問題 Two Sum
4-5 靈活選擇鍵值 4Sum II
4-6 靈活選擇鍵值 Number of Boomerangs
4-7 查詢表和滑動視窗 Contain Duplicate II
4-8 二分搜尋樹底層實現的順序性 Contain Duplicate III
第5章 在連結串列中穿針引線
連結串列是一種特殊的線性結構,由於不能像陣列一樣進行隨機的訪問,所以和連結串列相關的問題有他自身的特點。我將之稱為穿針引線。我們在這一章,就來看一看,如何在連結串列中穿針引線。
5-1 連結串列,在節點間穿針引線 Reverse linked List
5-2 測試你的連結串列程式
5-3 設立連結串列的虛擬頭結點 Remove linked List Elements
5-4 複雜的穿針引線 Swap Nodes in Pairs
5-5 不僅僅是穿針引線 Delete Node in a linked List
5-6 連結串列與雙指標 Remove Nth Node Form End of List
第6章 棧,佇列,優先佇列
棧和佇列雖然是簡單的資料結構,但是使用這些簡單的資料結構所解決的演算法問題不一定簡單。在這一章裡,我們將來探索,和棧與佇列相關的演算法問題。
6-1 棧的基礎應用 Valid Parentheses
6-2 棧和遞迴的緊密關係 Binary Tree Preorder Inorder and Postorder Traversal
6-3 運用棧模擬遞迴
6-4 佇列的典型應用 Binary Tree Level Order Traversal
6-5 BFS和圖的最短路徑 Perfect Squares
6-6 優先佇列
6-7 優先佇列相關的演算法問題 Top K Frequent Elements
第7章 二叉樹和遞迴
遞迴,是使用計算機解決問題的一種重要的思考方式。而二叉樹由於其天然的遞迴結構,使得基於二叉樹的演算法,均擁有著遞迴性質。使用二叉樹,是研究學習遞迴演算法的最佳入門方式。在這一章裡,我們就來看一看二叉樹中的遞迴演算法。…
7-1 二叉樹天然的遞迴結構
7-2 一個簡單的二叉樹問題引發的血案 Invert Binary Tree
7-3 注意遞迴的終止條件 Path Sum
7-4 定義遞迴問題 Binary Tree Path
7-5 稍複雜的遞迴邏輯 Path Sum III
7-6 二分搜尋樹中的問題 Lowest Common Ancestor of a Binary Search Tree
第8章 遞迴和回溯法
回溯法是解決很多演算法問題的常見思想,甚至可以說是傳統人工智慧的基礎方法。其本質依然是使用遞迴的方法在樹形空間中尋找解。在這一章,我們來具體看一下將遞迴這種技術使用在非二叉樹的結構中,從而認識回溯這一基礎演算法思想。…
8-1 樹形問題 Letter Combinations of a Phone Number
8-2 什麼是回溯
8-3 排列問題 Permutations
8-4 組合問題 Combinations
8-5 回溯法解決組合問題的優化
8-6 二維平面上的回溯法 Word Search
8-7 floodfill演算法,一類經典問題 Number of Islands-
8-8 回溯法是經典人工智慧的基礎 N Queens
第9章 動態規劃基礎
很多同學聽到“動態規劃”的名稱可能會望而生畏,覺得動態規劃的問題都很複雜。但其實,動態規劃本質依然是遞迴演算法,只不過是滿足特定條件的遞迴演算法。在這一章裡,我們就來逐步解開動態規劃的神祕面紗
9-1 什麼是動態規劃
9-2 第一個動態規劃問題 Climbing Stairs
9-3 發現重疊子問題 Integer Break
9-4 狀態的定義和狀態轉移 House Robber
9-5 0-1揹包問題
9-6 0-1揹包問題的優化和變種
9-7 面試中的0-1揹包問題 Partition Equal Subset Sum
9-8 LIS問題 Longest Increasing Subsequence
9-9 LCS,最短路,求動態規劃的具體解以及更多
第10章 貪心演算法
通常同學們可能會認為貪心演算法比較簡單。確實,通常貪心演算法的實現非常容易,但是,一個問題是否能夠使用貪心演算法,是一定要小心的。我們在這一章來看一看,貪心演算法可能會有哪些坑。
10-1 貪心基礎 Assign Cookies
10-2 貪心演算法與動態規劃的關係 Non-overlapping Intervals
10-3 貪心選擇性質的證明
第11章 課程結語
看完整個課程,我不能保證所有的同學都能百分百地對每一個演算法面試問題應答自如,但認真學習的同學對大部分問題都應該已經有了一個合理的思維路徑。在最後一章,我們再來簡單地總結一下,並祝每一位同學都能找到自己喜歡的工作,大展巨集圖:)…
11-1 結語