#
Vol.0/ 学长学姐有话说
了解课程之前,先来看看算法课第1期的学长学姐们是怎么评价咱们的算法课吧~~
第一位同学说:“构建与完善了算法知识体系。”
第二位同学说:“老师提供的模板非常实用。”
第三位同学说:“题量充足,解题有思路,融会贯通。”
第四位同学说:“用了7周已经对面试中的算法和基本的数据结构有了很大程度的了解。”
其他同学也收获了很多,还在观望的同学们,算法班第2期可以入手啦~~
#
Vol.1/ 老师有话说
无隅老师
本科、硕士毕业于北邮,曾任职于亚马逊中国研发中心;担任多年面试官,面试过100+候选人;社招拿到美团L8, 阿里P7,头条2-2等offer,总包均过百万年薪
大家好,我是无隅,近期我的《算法体系课》(2022版第2期)(PS.前20人送价值399元的 《大厂面试手写代码合集》课程!)即将开班,很高兴即将和大家一起度过三个月的时光。 之所以推出我的算法体系班基于三个原因:1. 我的资历能够胜任;2. 准备充分时机成熟;3. 工作多年对算法学习的感悟和总结。
原因1:个人资历。简单介绍一下我自己 ,我目前就职于一家北美知名外企,也是公司内最年轻的tech leader之一。本科和硕士毕业于中国互联网黄埔军校北邮,但在学校的课堂上我并没有对算法有任何重视。当决定要冲刺FLAG大厂的时候,发现算法是必考项,在了解到算法的重要性后经过一段非常痛苦的挣扎,我总结出一套足以应付大厂算法面试的方法,帮助自己在三个月内快速学习,最终顺利拿到了 FLAG公司的offer ,直到现在也在这个行业里从业了 五六年 的时间。 正式工作后,基本每隔一年我都会出来看机会。在今年我依然拿到了 美团L8、阿里P7、头条2-2和一些创业公司实线leader的职位 , 年包均超过百万 。即便工作多年,基本上每一次大厂面试都会遇到两三道算法题,基于早期的算法知识储备和学习经验,每次面试应对算法题都如探囊取物。同时我作为公司的面试官也曾 面试过百位以上的技术候选人,对求职者算法能力有非常清晰的需求。所以,我自认为完全有能力带着大家学好算法。
原因2:算法训练营推出时机已经成熟。其实早在2018我就来谷里上课,到目前没中断过。陆续出过《Java8新特性》、《Java设计模式》、《Java微服务架构》、《程序员的算法课》等视频课程。这些年的讲课经验让我对自己课程把控能力越来越自信,但视频课总归离学生太远。今年,我内心有越来越强烈的冲动想推出自己的算法系统课训练营——拥有自己的学生,重构知识体系,重构学习流程,完全把控他们的学习过程,最终亲自检验他们的学习成果。就像一个武林老者以前没事只是爱写点武林秘籍,但现在却非常想收徒弟亲传内功亲点招式。
原因3:对算法学习的感悟和总结。 现在的面试要求逐年提高,不论你是应届生面对校招,还是已经工作了很多年的社招老鸟,甚至现在卷到即使是实线管理岗,算法面试都是必须要面对的。很多同学虽然技术不错,但每次去面试都会跪在算法上,非常可惜。看到很多同学依然觉得算法面试太难,是很难跨过的一道坎,所以放弃了追逐心中dream offer的想法。
所有学算法的同学基本上都尝试过leetcode上算法刷题,成功者却少之又少。失败的最主要原因是半途而废。
一方面是因为leetcode有数千个题目,很多题目是同质的,如果不会归纳总结,没有一个体系、重点的概念,每题都刷,就像一个人在无边无际的稻田里插秧,看不到终点没有目标,自然坚持不下去。另一方面,算法题本质是智商题。很多题目虽小代码虽短,但题目背后的原理却很深很难。别人的答案(算法代码实现)是原理的体现,懂了原理很容易懂代码,但不懂原理很难知道别人为什么这么做。刷算法时会发现前面简单的刷起来很快,到中期即使是看别人的代码也很难看懂,刷题进度自然会停滞。
题是一定要刷的,如何让大家花最少的时间刷的懂、刷的爽、刷的有技巧、刷的系统、不轻易放弃,是本次算法系统班的核心目标。
训练营将非常注重方法论与知识体系的构建 。我希望算法体系课程不单单教给大家一道题一个知识点是怎么样的,更希望能通过算法数据结构的学习,帮助大家掌握一些常用的方法论与结构化思维模型,让大家今后的学习之路更加容易顺畅。
除了知识体系化之外,因为算法面试的主要形式就是现场写代码,课程内涉及的所有题目,我们都会延续看题目->讲思路->写代码的模式 。这里的看题目不单单是讲题目说的字面意思,而是会深入题目背后,挖掘要考察的知识点和与其他的知识联系。讲思路会带领大家仔细分析每一道题目,梳理思路,总结模版与套路。我们不只在乎刷题的数量,更在乎刷题的质量,对于同一道题目,希望能给大家讲透,提供多种方法。
写代码这一步是我们和其他很多算法课程完全不一样的地方,我们不会照着ppt讲义讲写好的代码,而是会直接打开每一道题对应leetcode链接,现场写代码调试运行。同学们可以跟着我一起打开leetcode,边看边跟着我写。跟着我做一遍,然后自己做一遍,下一周再在纸上手写一遍,集中一次性突破一个知识点。这样,每一道题目至少做了三遍,每一遍做的时候,能总结反思自己出错的原因,真正搞明白每一道题目。
学生的作业就是在leetcode刷题,这些题目大都是我在课程里现场手写刷过的题。我会每日安排学生具体的刷题量,在班级严格监督大家的刷题结果。我对大家作业完成度的重视和课程本身同等重要。
所以大家也需要做好心理准备,我们的课程强度非常大,但是大家只要做好短时间痛苦一次的准备,一次搞清楚,以后的收益也是无限的,只要大家跟着我的步伐,在接下来的三个月的课程中,大家一定能够看到自己突飞猛进的进步。
#
Vol.2/ 学习模式
本期算法训练营总学习时间持续三个月(12周)。
日常的学习安排上,每周日上午发布下一周的知识点与刷题视频+ 每周互动直播 + 每日刷题跟进 + 班级 学习监督 + 期中期末考试。
首先,我们会在开始学习之前让每位同学做一份摸底测试,了解大家的算法基础,老师会根据你的基础情况给你反馈出之后你的算法学习重点和学习路线。
摸底测试和部分老师评价反馈展示:
整个训练营的核心目标是在老师的带领下独自刷完200道leetcode算法题,且每道题刷3遍,每一遍刷题之后都要写下自己的刷题思路和反馈。同时,老师会把题目都分成: 必做题,拓展题,难题 ,这3类,大家可以根据自己的基础情况和时间来规划。
每周1次直播班会,每周班会都有对应的主题,有知识点串讲、读书分享会、职场晋升之路、学习上踩过的坑、技术简历怎么写、模拟面试和面试中的非技术问题怎么回复等,还会和大家一起讨论并讲解当周知识重难点,会检查大家当周刷题情况,给予物质表扬和口头批评,同时标注下周的刷题重点。
在教务管理上我们会给班级所有的同学建立一个花名册,把每周的刷题都布置上去,大家每完成一道题,就勾选,老师和同学可以很直观的看到每位同学的学习刷题情况,及时跟进和提供帮助。
每周学习安排:
每周学习安排 | ||
学习准备 | 完成课前预习的内容+摸底测试 | |
开班 | 开班典礼,介绍这3个月的学习模式,直播时间 | |
周日晚上 直播班会
| 1、点评上一周的刷题完成,给同学们答疑解惑 2、讲解下一周的刷题重点 | |
周一到周五 | 1、学习这周的刷题视频并完成本周的第1遍刷题 2、上周刷题的第3遍巩固 | |
周六周日
| 1、完成这周刷题的第2遍刷题 2、上周刷题的第3遍巩固 | |
中期和末期 | 1、算法知识体系的建立 2、期中考试 3、准备简历,算法模拟面试并总结 4、期末考试 |
#
Vol.3/ 你将获得
一些常用的方法论与结构化思维
体系化的算法与数据结构知识
leetcode近两百道题目的AC记录
全方面了解面试流程与准备流程,面试时做到真正的心中有数
职场发展与软技能
一群志同道合的小伙伴,未来重要的人脉
#
Vol.4/ 知识大纲
我们算法班的内容是非常多的,大纲也是非常非常非常长,同学们也可以直接点击下面链接查看哦~~
饥人谷算法班大纲(第2期):https://docs.qq.com/doc/DVEdlVWVmTnJ0c1Rt
算法还有用吗?
面试流程详细解读
深入技术面试过程
找到好工作的关键是什么?
面试官视角下的面试
算法面试中的常见问题与误区
算法面试问题标准解答流程
如何高效准备算法面试
刷题网站leetcode介绍
后疫情时代:在线面试介绍
如何快速安装运行java
第一个Java程序:如何打印Hello World
变量与赋值
Java中的数据类型之基本类型
引用类型与数组用法详解
字符串基本操作
赋值、算术和一元运算符
关系运算符与条件运算符
位运算与移位操作符
控制语句:决策语句 - if/switch语句
控制语句:循环语句 - for/while/do-while
控制语句:分支语句
Java面向对象概念初探
修饰符
访问修饰符
非访问修饰符
方法(函数)编写入门
方法定义
方法调用
不得不知道的重要知识:基本类型赋值 V.S 引用类型赋值
数据在内存中是如何存储的
基本类型赋值
引用类型赋值
课程定位和目标
课程内容介绍
为啥用Java作为代码示例语言?
不会Java能学吗?
算法体系课程学习指南(重要)
算法基础水平摸底考试
如何让你刷100多题搞定算法面试
集合
函数
排列与组合
数学归纳法
数列
什么是时间复杂度
评判算法时间复杂度
教你一次搞定计算时间复杂
青铜:基本操作的时间复杂度计算
黄金:For/While循坏时间复杂度计算
钻石:复合操作时间复杂度计算:加还是乘?
实战:一般问题时间复杂度计算
星耀:递归问题的时间复杂度计算之求解函数表达式
王者:递归问题的时间复杂度计算之递归树
荣耀王者:递归问题的时间复杂度计算之主定理与经验性结论
实战:递归问题时间复杂度计算
面试中极为容易遗漏的地方:空间复杂度
什么是数组?
数组的特性
Java中如何表示数组
为啥用数组
数组操作的局限性
【实战】K-Sum系列问题
初级:两数之和
中级:三数之和
高级:四数之和
高级:K-Sum解法总结
【实战】反转数组
【实战】奇数偶数排序
【实战】合并两个有序数组
【实战】区域和检索 - 数组不可变
【实战】一维数组的动态和
【实战】所有奇数长度子数组的和
【实战】和为k的子数组
【实战】二维区域和检索 - 矩阵不可变
【实战】除自身以外数组的乘积
数组列表ArrayList的定义与基操
动手实现数组列表
实现一个数组列表需要考虑什么?
动手实现数组列表:属性及构造器
动手实现数组列表:方法及函数
动手实现数组列表:Get方法与Set方法
动手实现数组列表:Add方法实现与动态扩容
动手实现数组列表:Remove方法
功能测试/bug fix/泛型支持
ArrayList的实现总结
AAA测试大法
栈的初始化与基本操作
什么时候考虑使⽤栈
动手实现栈
实现一个栈需要考虑什么?
栈的实现 – 属性及构造器
栈的实现 – ⽅法、函数
拓展:栈和堆在计算机操作系统上的概念
队列的初始化与基本操作
什么时候考虑使⽤队列
动手实现栈队列
实现一个栈需要考虑什么?
队列的实现(数组)
属性及构造器
⼊队操作
出队操作
⽤数组实现队列的问题?
队列的实现(链表)
属性及构造器
⼊队操作
出队操作
【实战】⽤栈实现队列
【实战】用队列实现栈
【实战】最⼩栈
【实战】有效的括号
【实战】简化路径
【实战】逆波兰表达式
单调栈介绍
单调栈运作过程详解
单调栈代码模版
【实战】单调栈中核心问题:Next Greater Number
【实战】每日温度
【实战】下一个更大的元素I
【实战】下一个更大的元素II
【实战】柱状图中最大的矩形
【实战】接雨水
从一个简单问题看二分搜索
二分搜索模版
模版精讲
二分搜索模版四要素
面试中是否使用递归的tips
利用主定理速推时间复杂度
【实战】模版题:二分搜索
【实战】第一个错误的版本
【实战】在排序数组中查找元素的第一个和最后一个位置
【实战】搜索插入位置
【实战】搜索二维矩阵
【实战】搜索二维矩阵 II
【实战】x的平方根
【实战】寻找旋转排序数组中的最小值
【实战】寻找旋转排序数组中的最小值II
【实战】山脉数组的峰顶索引
【实战】搜索旋转排序数组
什么是代码风格
为啥代码风格重要?[跟写作文中写字好看一样的道理]
命名
空格
缩进
括号
链表介绍与特性详解
链表应用实例
如何实现链表与基础操作 - 大体框架
如何实现链表与基础操作 - 获取操作
如何实现链表与基础操作 - 添加操作
如何实现链表与基础操作 - 修改操作
如何实现链表与基础操作 - 删除操作
如何实现链表与基础操作 - 获取链表长度
链表使用技巧之Dummy Node
【实战】得到链表中点元素
【实战】链表高频题目:链表中倒数第k个节点
【实战】环形链表I
【实战】环形链表II
【实战】得到链表中点元素
【实战】链表高频题目:链表中倒数第k个节点
【实战】环形链表I
【实战】环形链表II
【实战】合并两个有序链表
【实战】两数相加
【实战】删除链表的倒数第 N 个结点
【实战】删除排序链表中的重复元素
【实战】删除排序链表中的重复元素II
【实战】反转链表 I
【实战】反转链表 II
【实战】交换相邻结点
【实战】两数相加II
【实战】重排链表
【实战】回文链表
【实战】旋转链表
从一个故事一张图理解递归
递归三要素
递归的代码问题
【实战】斐波那契数列
【实战】汉诺塔
树的定义
树的分类
树的相关概念与术语
二叉树概念
特殊的二叉树
完全二叉树
满二叉树
二叉树的属性
二叉树的表示
二叉树三种遍历详解
【实战】二叉树遍历-递归实现
【实战】非递归实现二叉树前序遍历方法1 - 利用栈改变元素顺序
【实战】非递归实现二叉树前序遍历方法2 - 模拟递归
【实战】非递归实现二叉树中序遍历- 模拟递归
【实战】非递归实现二叉树后序遍历方法1 - 利用两个栈
【实战】非递归实现二叉树后序遍历方法2 - 利用一个栈模拟递归
拓展:神级遍历算法 - Morris遍历
基础分析
【实战】从前序与中序遍历序列构造二叉树
【实战】从后序与中序遍历序列构造二叉树
二叉搜索树特性
二叉搜索树API实现:查找节点
【实战】二叉搜索树中的搜索
二叉搜索树API实现:添加节点
【实战】二叉搜索树中的插入操作
二叉搜索树API实现- 删除节点:删除节点没有任何子树节点
二叉搜索树API实现- 删除节点:删除节点只有一个子树
二叉搜索树API实现- 删除节点:删除节点有左右两个子树
【实战】删除二叉搜索树中的节点
三分钟入门DFS和BFS
DFS在面试中的考察范围
DFS模版- 一般问题与二叉树
分治法详解
分治法V.S 遍历法
分治法模版详解
【实战】二叉树的最大深度
【实战】⼆叉树的最⼩深度
【实战】翻转二叉树
【实战】对称二叉树
【实战】平衡二叉树
【实战】路径总和
【实战】二叉树的最近公共祖先
【实战】验证二叉搜索树
【实战】二叉树中的最大路径和
题目特点
从递归问题说起
从递归问题到回溯法
.回溯法模版心法
【重要】回溯法模版:以子集问题为例 - 题目分析与思路讲解
【重要】回溯法模版:以子集问题为例 - 模版代码实现
【重要】回溯法模版总结- 以子集问题为例
【实战】子集II
【实战】全排列
【实战】全排列II
【实战】组合总和
【实战】组合总和 II
【实战】复原 IP 地址
【实战】电话号码的字母组合
【实战】括号生成
【实战】格雷编码
【实战】二叉树的所有路径
【实战】根节点到叶节点求和
【实战】路径总和 II
【实战】分割回文串:直接回溯
【实战】分割回文串:记忆化搜索优化
【实战】单词拆分
【实战】单词拆分II - 直接回溯
【实战】单词拆分II - 记忆化搜索
图的基础概念
图的表示:邻接矩阵
图的表示:邻接表
图搜索:DFS V.S BFS
图中DFS模版详解与实现
【实战】无向图中连通分量的数目
【实战】省份数量
【实战】以图判树
【实战】克隆图
二维DFS问题分类与题目特点
小技巧:如何在二维空间内移动
二维DFS模版
【实战】迷宫问题
【实战】单词搜索
【实战】矩阵中的最长递增路径
【实战】岛屿数目
【实战】岛屿的最大面积
【实战】被围绕的区域
【实战】岛屿的周长
基本思想
什么时候使用广度优先搜索
BFS模板以及实现
【实战】 二叉树的层序遍历I/II
【实战】二叉树的锯齿形层序遍历
【实战】N叉树的层序遍历
【实战】二叉树的最小深度
【实战】二叉树的最大深度
图中的BFS模版
【实战】无向图中连通分量的数目 - BFS解法
【实战】省份数量 - BFS解法
【实战】以图判树 - BFS解法
【实战】克隆图 - BFS解法
二维矩阵问题BFS模版详解
【实战】岛屿数量 - BFS解法
【实战】被围绕的区域 - BFS解法
拓扑排序 101
Kahn算法:求解有向图拓扑排序
拓扑排序Kahn算法代码实现
【实战】课程表II
【实战】课程表I
最短路径BFS相关问题特点
【实战】经典迷宫求最短路径
【实战】迷宫II
双向BFS介绍
【实战】单词接龙 - 利用单向BFS求解
【实战】单词接龙 - 利用双向BFS求解
【实战】单词接龙II
面试中对于排序算法到底要掌握到什么程度?
示例代码
循环不变式 for while
基本思想与时间复杂度分析
示例代码
基本思想与时间复杂度分析
分治法
示例代码
基本思想与时间复杂度分析
示例代码
扩展1: 快速排序随机化版本
扩展2:期望为线性时间的选择算法(quick select)
【实战】求数组nums中第k大/⼩的元素
【实战】对链表进行插入排序
【实战】排序链表 - 利用归并排序实现
【实战】排序链表 - 利用快速排序实现
【实战】颜色分类
【实战】数组中的逆序对
【实战】计算右侧小于当前元素的个数
【实战】区间和个数
什么是哈希表
哈希表的基本操作
Hash Function哈希函数
如何解决哈希冲突
开散列
闭散列
哈希表的实现原理
哈希扩容问题
Java中HashMap的基本使用
HashMap原理与实现详解
ConcurrentHashMap原理与实现详解
【实战】设计哈希映射(动手实现HashMap)
【实战】存在重复元素I
【实战】存在重复元素II
【实战】两数之和
【实战】同构字符串:利用一个map
【实战】同构字符串:利用两个map
【实战】单词规律
【实战】有效字母异位词
【实战】字母异位词分组
【实战】整数转罗马数字
【实战】罗马数字转整数
缓存知识简介
LRU原理与LinkedHashMap介绍
【实战】LRU Cahce:利用Java LinkedHashMap
【实战】LRU Cahce:利用Map + 自定义双向链表
Two Sum问题分析
【实战】两数之和
【实战】三数之和
【实战】小于 K 的两数之和
【实战】有效三角形的个数
【实战】较小的三数之和
【实战】最接近的三数之和
划分类问题分析与模板详解
【实战】摆动排序
灌水类问题分析与模板详解
【实战】盛最多水的容器
【实战】接雨水
窗口类模板详解
【实战】长度最小的子数组
【实战】无重复字符的最长子串
【实战】最小覆盖子串
同向型双指针之 快慢类题目实战
【实战】得到链表中点元素
【实战】得到链表的倒数第N个节点
【实战】环形链表 I
【实战】环形链表 II
【实战】合并两个有序数组
【实战】合并两个有序链表
【实战】最小差
堆的实现与复杂度分析
堆排序
【实战】找出第k大的数
【实战】合并k个有序链表/数组
【实战】数据流中位数
【实战】滑动窗口最大值
【实战】丑数
【实战】排序矩阵中第k小的元素
【实战】接雨水II
【实战】天际线
动态规划题目特点
什么是动态规划(感性版认识)
递归版解法
⾃顶向下的动态规划
⾃底向上的动态规划
更进⼀步:空间优化
动态规划空间优化:滚动数组
什么是动态规划 (算法导论)
4个步骤设计动态规划 (算法导论)
核⼼:状态转移⽅程
拓展:⼦问题图
适合动态规划求解的条件
空间优化
局部最优和全局最优实现时间优化
记忆化搜索
坐标型动态规划
序列型动态规划
划分型动态规划
区间型动态规划
背包型动态规划
博弈型动态规划
并查集
字典树
前缀和
跳表
洗牌算法
采样算法
B树/B+树
布隆过滤器
#
Vol.5/ 报名&费用
课程费用:原价4999元,国庆特惠2980元, 仅限活动期间!
戳此直接报名《算法体系课第2期》
前20人送价值399元的《大厂面试手写代码合集》课程,还剩最后10个名额!!!
咨询报名或需分期报名,可联系班主任橙子:xiedaimala04。
#
Vol.6/ 彩蛋福利
算法1期班群的有趣瞬间~~
算法班级群里的有趣瞬间和答疑互动还有很多很多,这里就不一一列举啦,想亲身体验的同学快快报名上算法第2期 的车呀~~~
#
Vol.7/ 常见问题
一、 学习周期是多久?
训练营的学习周期是3个月,老师会在3个月内让大家突击完成算法学习和练习。超出3个月后训练营期间录制的视频依旧保留可看(保留2年),但本期学习活动会停止。
二、 报名后可以退款吗?
报名及开课前,可无条件申请退款,开课后1个月内,觉得课程不合适,可以申请退款,扣除已经学习的费用退余款。提前开通上一期课程学习的同学不可申请退课。
三、参加完训练营一定能解决所有算法问题吗?
独家整理和总结了大厂面试官的200道算法出题题库,基本涵盖绝大部分面试中可能会出现的算法问题,可以让你抓住重点,通过3个月时间通刷我们的题库,轻松应对大厂的算法面试。
四、算法中用的编程语言是什么?
算法的核心是解题思路,编程语言并不重要,你会任何一种主流语言都不影响算法的学习。课程里涉及到现场写代码的部分用的是Java,如果没有Java语言基础,Java基础语法学习视频我们也提前放在算法刷题前面的前置课程里。同时课程会再提供JS版本的解题代码。
五、和自己刷算法题有什么区别?
所有学算法的同学基本上都尝试过leetcode上算法刷题,成功者却少之又少。失败的最主要原因是半途而废。
(1)leetcode有数千个题目,很多题目是同质的,如果不会归纳总结,没有一个体系、重点的概念,每题都刷,就像一个人在无边无际的稻田里插秧,看不到终点没有目标,自然坚持不下去。
而算法班老师根据自己多年担任面试官和大厂高级岗位被面试经验,总结了这套大厂面试算法题库,只要把班级提供的题库和解题思路搞懂,可以应对各类算法面试。
算法班紧凑的任务安排和严格的要求,可以在90天刷完至少200道高频题。
(2)很多算法题虽小代码虽短,但题目背后的原理却很深很难。别人的答案(算法代码实现)是原理的体现,懂了原理很容易懂代码,但不懂原理很难知道别人为什么这么做。刷算法时会发现前面简单的刷起来很快,到中期即使是看别人的代码也很难看懂,刷题进度自然会停滞。
而算法班会深入题目背后,挖掘要考察的知识点和与其他的知识联系。讲思路会带领大家仔细分析每一道题目,梳理思路,总结模版与套路。我们不只在乎刷题的数量,更在乎刷题的质量,对于同一道题目,希望能给大家讲透,提供多种方法。
#
Vol.8/ 算法模拟面试
免费的算法模拟面试你想围观吗???
免费参加哦~就在10月7日 ,面试官和面试者都是同学的算法模拟面试你有围观过吗?想围观的快 找班主任预约 参加呀!!!
更多问题或咨询联系班主任微信
班主任小圆:xiedaimala03
班主任生生:xiedaimala05
班主任橙子:xiedaimala04