课程名称:
主讲老师:
林老师
BAT资深研发工程师(T7/P8级),致力于搜索引擎及其子系统的研发、迭代与优化,数据分析与挖掘领域专家,多年担任校园招聘、社会招聘面试官,丰富的面试候选人经验。
课程简介:
掌握算法与数据结构是成为优秀程序员的必经之路,众多国内外知名互联网企业都将算法面试作为程序员招聘的重要和必需途径,只有高效应对各类题目,将知识储备转化为面试中的优秀表现,才能获得大公司的青睐。
本门课程将程序员面试中常遇的算法与数据结构知识进行精简与归纳,细致入微地讲解笔试面试中的编程真题和相关知识点,全面提升应聘者在大型互联网公司(BAT、微软、Google等)算法面试时的竞争力,帮助应聘者脱颖而出。
课程特色:
1.将算法与数据结构的知识进行精简与归纳,帮助学员快速掌握相应知识要点。
2.以leetcode.com、codeforces.com中的题目为例题,利用OJ刷题的方式提升学员的编码能力与解决算法面试题的能力。
面向人群:
有一定的编程(C语言)基础,希望掌握与巩固算法与数据结构相关知识。
寻找知名互联网企业研发工作(校园招聘、社会招聘)的应聘者,希望能够快速掌握算法与数据结构面试题目的要点与技巧,并顺利通过相应面试。
开课时间:
2017.9.23
学习方式:
在线直播,共10次课,每次课2小时
每周2次(周六、周日,晚上20:00-22:00 国庆假期停课)
课程大纲:
第一课:链表
1. 链表的必备知识要点(包括基础知识、刷题中使用的STL等知识)
2. 链表逆序(LeetCode 92,206. Reverse Linked List 1,2)
3. 求两个链表的交点(LeetCode 160. Intersection of Two Linked Lists)
4. 链表的节点交换(LeetCode 24. Swap Nodes in Pairs)
5. 链表求环(LeetCode 141,142. Linked List Cycle 1,2)
6. 链表重新构造(LeetCode 86. Partition List)
7. 复杂的链表复制(LeetCode 138. Copy List with Random Pointer)
8. 排序链表合并(2个与多个) (LeetCode 21,23 Merge Two(k) Sorted ListsLeetCode)
第二课:栈、队列、堆
1. 栈、队列知识要点与实现(数组、链表)
2. 使用队列实现栈(LeetCode 232. Implement Queue using Stacks)
3. 使用栈实现队列(LeetCode 225. Implement Stack using Queues)
4. 包含min函数的栈(LeetCode 155. Min Stack)
5. 简单的计算器(栈的应用)( LeetCode 224. Basic Calculator)
6. 堆(优先级队列)知识要点与实现
7. 数组中第K大的数(堆的应用) (LeetCode 215. Kth Largest Element in an Array)
8. 寻找中位数(堆的应用)( LeetCode 295 Find Median from Data Stream)
第三课:贪心
1. 贪心算法知识要点,刷题必备的STL知识
2. 贪心题目1(LeetCode 455. Assign Cookies)
3. 贪心题目2(LeetCode 402. Remove K Digits)
4. 贪心题目3(LeetCode 134. Gas Station)
5. 贪心题目4(LeetCode 135. Candy)
6. 贪心题目5(LeetCode 502. IPO)
7. 贪心题目6(LeetCode 321. Create Maximum Number)
8. 贪心题目7(codeforces 582A GCD Table)
第四课:递归、分制、回溯
1. 递归的知识要点,回溯算法
2. 生成组合数(LeetCode 39. Combination Sum, LeetCode 40. Combination Sum II)
3. 生成排列数(LeetCode 46. Permutations, LeetCode 47. Permutations II)
4. N皇后问题(LeetCode 51. N-Queens, LeetCode 52. N-Queens II)
5. 分制算法知识要点
6. 快速排序算法与经典实现
7. 不同的加括号方法(LeetCode 241. Different Ways to Add Parentheses)
8. 两个数组的中位数(LeetCode 4. Median of Two Sorted Arrays)
第五课:树与图
1. 树与图的数据结构与基本算法
2. 树遍历的回调函数实现,并使用自动机概念实现非递归树前、中、后遍历
3. 树与链表的转换(LeetCode 114. Flatten Binary Tree to Linked List)
4. 最近的公共祖先(LeetCode 236. Lowest Common Ancestor of a Binary Tree)
5. 树的层次遍历应用(LeetCode 199. Binary Tree Right Side View)
6. 树的改造(LeetCode 117. Populating Next Right Pointers in Each Node 1,2)
7. 图的复制(LeetCode 133. Clone Graph)
8. 图的搜索与应用(LeetCode 207.Course Schedule)
第六课:二分查找、二叉排序树、位运算的应用
1. 二分查找、二叉排序树的知识要点
2. 数组的二分查找(LeetCode 33,81 Search in Rotated Sorted Array 1,2)
3. 区间二分查找(LeetCode 34. Search for a Range)
4. 排序链表转换为二叉排序树(LeetCode 109. Convert Sorted List to B- Search Tree)
5. 二叉排序树的遍历与改造(LeetCode 538 Convert BST to Greater Tree)
6. 二叉排序树中的第K大的数(LeetCode 230. Kth Smallest Element in a BST)
7. 位运算的知识要点
8. 使用位运算表示集合(LeetCode 78. Subsets)
9. 位运算应用题目(LeetCode 136,137,260. Single Number1,2,3)
第七课:哈希表与字符串
1. 哈希表与字符串知识要点
2. 哈希题目 (LeetCode 290. Word Pattern)
3. 哈希与字符串综合 (LeetCode 3.Longest Substring Without Repeating Characters)
4. 哈希与字符串综合 (LeetCode 76. Minimum Window Substring)
5. 哈希与字符串综合 (LeetCode 30. Substring with Concatenation of All Words)
6. 字符串题目 (LeetCode 459. Repeated Substring Pattern)
7. 字符串题目 (LeetCode 468. Validate IP Address)
第八课:搜索
1. 深度优先搜索与广度优先搜索算法
2. 深搜题目 (LeetCode 200. Number of Islands)
3. 深搜题目 (LeetCode 473. Matchsticks to Square)
4. 深搜题目 (LeetCode 491. Increasing Subsequences)
5. 广搜题目 (LeetCode 126,127 Word Ladder 1,2)
6. 广搜题目 (LeetCode 417. Pacific Atlantic Water Flow)
7. 广搜题目 (LeetCode 407. Trapping Rain Water II)
第九课:动态规划
1. 动态规划知识要点
2. 动态规划题目1(LeetCode 120. Triangle)
3. 动态规划题目2(LeetCode 53. Maximum Subarray)
4. 动态规划题目3(LeetCode 198,213. House Robber 1,2)
5. 动态规划题目4(LeetCode 322. Coin Change)
6. 动态规划题目5(LeetCode 72. Edit Distance)
7. 动态规划题目6(LeetCode 174. Dungeon Game)
8. 动态规划题目7(codeforces 711C Coloring Trees)
第十课:复杂数据结构
1. Trie树的构造与基本算法
2. Trie树的构造 (LeetCode 208. Implement Trie (Prefix Tree))
3. Trie树的应用 (LeetCode 212. Word Search II)
4. 并查集的基本算法
5. 并查集的应用 (LeetCode 547. Friend Circles)
6. 线段树与树状数组
7. 线段树与树状数组的应用(LeetCode 307. Range Sum Query – Mutable)