经典算法类面试题挑战
共222个章节
开篇
文档 1 课程综述
文档 2 「学一学」时间复杂度与空间复杂度

知识点: 1.时间复杂度 2.空间复杂度 3.大O表示法

挑战 1 「真题练习」数组中重复的数字
文档 3 「真题讲解」数组中重复的数字

知识点: 1.暴力法。 2.利用排序帮助解题。 3.空间换时间思想。

挑战 2 「真题练习」两数之和
文档 4 「真题讲解」两数之和

知识点: 1.暴力法。 2.空间换时间思想。

数组(上)
实验 1 「学一学」数组基础通关

知识点: 1.数组基本概念。 2.一维数组和二维数组的创建和访问。 3.算法练习题中常用的数组方法。

挑战 3 「真题练习」替换空格
文档 5 「真题讲解」替换空格

知识点: 1.使用API解决问题 2.遍历字符串 3.双指针

挑战 4 「真题练习」二维数组中的查找
文档 6 「真题讲解」二维数组中的查找

知识点: 1.二维数组的遍历 2.线性查找

挑战 5 「真题练习」删除有序数组中的重复项
文档 7 「真题讲解」删除有序数组中的重复项

知识点: 1.双指针之快慢指针

挑战 6 「真题练习」移动零
文档 8 「真题讲解 」移动零

知识点: 1.双指针之快慢指针 2.交换数组元素的两种方法

挑战 7 「真题练习」长度最小的子数组
文档 9 「真题讲解」长度最小的子数组

知识点: 1.求最小值或最大值的小技巧 2.滑动窗口

数组(下)
挑战 8 「真题练习」反转字符串数组
文档 10 「真题讲解」反转字符串数组

知识点: 1.双指针之对撞指针

挑战 9 「真题练习」两数之和 II
文档 11 「真题讲解」两数之和 II

知识点: 1.双指针之对撞指针

挑战 10 「真题练习」移除元素
文档 12 「真题讲解」移除元素

知识点: 1.快慢指针 2.对撞指针

挑战 11 「真题练习」有序数组的平方
文档 13 「真题讲解」有序数组的平方

知识点: 1.数组sort方法 2.双指针之对撞指针 3.数组unshift方法

挑战 12 「真题练习」三数之和
文档 14 「真题讲解」三数之和

知识点: 1.双指针之对撞指针

链表(上)
实验 2 「学一学」链表基础通关

知识点: 1.链表基本概念。 2.链表和数组的区别。 3.链表的代码实现。

挑战 13 「真题练习」从尾到头打印链表
文档 15 「真题讲解」从尾到头打印链表

知识点: 1.链表的遍历

挑战 14 「真题练习」删除排序链表重复元素
文档 16 「真题讲解」删除排序链表重复元素

知识点: 1.链表的赋值 2.链表的遍历 3.链表的删除

挑战 15 「真题练习」移除链表元素
文档 17 「真题讲解」移除链表元素

知识点: 1.链表的赋值 2.链表的遍历 3.虚拟头节点

挑战 16 「真题练习」反转链表
文档 18 「真题讲解」反转链表

知识点: 1.链表的赋值 2.链表的遍历

链表(下)
挑战 17 「真题练习」链表的中间节点
文档 19 「真题讲解」链表的中间节点

知识点: 1.求链表的长度 2.双指针之快慢指针

挑战 18 「真题练习」删除链表的倒数第 N 个节点
文档 20 「真题讲解」删除链表的倒数第 N 个节点

知识点: 1.双指针之快慢指针

挑战 19 「真题练习」合并两个有序链表
文档 21 「真题讲解」合并两个有序链表

知识点: 1.链表的遍历和赋值 2.虚拟头节点

挑战 20 「真题练习」环形链表
文档 22 「真题讲解」环形链表

知识点: 1.借用额外空间 2.快慢指针

挑战 21 「真题练习」两两交换链表中的节点
文档 23 「真题讲解」两两交换链表中的节点

知识点: 1.链表的赋值、遍历和删除 2.虚拟头节点

挑战 22 「真题练习」回文链表
文档 24 「真题讲解」回文链表

知识点: 1.链表转数组或字符串 2.反转链表、快慢指针

二分法
实验 3 「学一学」二分法思想

知识点: 1.线性查找和二分查找

挑战 23 「真题练习」二分查找
文档 25 「真题讲解」二分查找

知识点: 1.二分查找思想 2.左右指针可访问区间

挑战 24 「真题练习」搜索插入位置
文档 26 「真题讲解」搜索插入位置

知识点: 1.二分查找

挑战 25 「真题练习」x 的平方根
文档 27 「真题讲解」x 的平方根

知识点: 1.二分查找

栈和队列(上)
文档 28 「学一学」栈和队列基础通关

知识点: 1.栈 2.队列

挑战 26 「真题练习」有效的括号
文档 29 「真题讲解」有效的括号

知识点: 1.栈

挑战 27 「真题练习」删除字符串中的所有相邻重复项
文档 30 「真题讲解」删除字符串中的所有相邻重复项

知识点: 1.栈

挑战 28 「真题练习」简化路径
文档 31 「真题讲解」简化路径

知识点: 1.栈

挑战 29 「真题练习」逆波兰表达式求值
文档 32 「真题讲解」逆波兰表达式求值

知识点: 1.栈 2.策略模式 3.位运算取整

栈和队列(下)
挑战 30 「真题练习」用栈实现队列
文档 33 「真题讲解」用栈实现队列

知识点: 1.栈 2.队列

挑战 31 「真题练习」用队列实现栈
文档 34 「真题讲解」用队列实现栈

知识点: 1.栈 2.队列

挑战 32 「真题练习」最近的请求次数
文档 35 「真题讲解」最近的请求次数

知识点: 1.队列

递归
实验 4 「学一学」递归基础通关

知识点: 1.递归基本概念 2.终止条件和递归条件

文档 36 递归真题练习(上)

知识点: 1.递归 2.链表 3.递归条件和终止条件 4.递归辅助函数

文档 37 递归真题练习(下)

知识点: 1.递归 2.链表 3.递归条件和终止条件

排序
挑战 33 「真题练习」数组排序
文档 38 「真题讲解」数组排序(上)

知识点: 1.冒泡排序 2.选择排序 3.插入排序

文档 39 「真题讲解」数组排序(下)

知识点: 1.归并排序 2.快速排序

树(一)
实验 5 「学一学」树基础通关

知识点: 1.树 2.二叉树 3.二叉搜索树 4.二叉树的遍历

挑战 34 「真题练习」相同的树
文档 40 「真题讲解」相同的树

知识点: 1.二叉树 2.递归

挑战 35 「真题练习」对称二叉树
文档 41 「真题讲解」对称二叉树

知识点: 1.二叉树 2.递归

挑战 36 「真题练习」二叉树的最大深度
文档 42 「真题讲解」二叉树的最大深度

知识点: 1.二叉树 2.递归

挑战 37 「真题练习」二叉树的最小深度
文档 43 「真题讲解」二叉树的最小深度

知识点: 1.二叉树 2.递归

挑战 38 「真题练习」翻转二叉树
文档 44 「真题讲解」翻转二叉树

知识点: 1.二叉树 2.递归

树(二)
挑战 39 「真题练习」二叉树展开为链表
文档 45 「真题讲解」二叉树展开为链表

知识点: 1.二叉树 2.递归

挑战 40 「真题练习」合并二叉树
文档 46 「真题讲解」合并二叉树

知识点: 1.二叉树 2.递归

挑战 41 「真题练习」二叉树的最近公共祖先
文档 47 「真题讲解」二叉树的最近公共祖先

知识点: 1.二叉树 2.递归

挑战 42 「真题练习」二叉树的直径
文档 48 「真题讲解」二叉树的直径

知识点: 1.二叉树 2.递归

挑战 43 「真题练习」另一棵树的子树
文档 49 「真题讲解」另一棵树的子树

知识点: 1.二叉树 2.递归

树(三)
挑战 44 「真题练习」平衡二叉树
文档 50 「真题讲解」平衡二叉树

知识点: 1.二叉树 2.递归

挑战 45 「真题练习」完全二叉树的节点个数
文档 51 「真题讲解」完全二叉树的节点个数

知识点: 1.二叉树 2.递归

挑战 46 「真题练习」二叉树的所有路径
文档 52 「真题讲解」二叉树的所有路径

知识点: 1.二叉树 2.递归

挑战 47 「真题练习」路径总和
文档 53 「真题讲解」路径总和

知识点: 1.二叉树 2.递归

挑战 48 「真题练习」左叶子之和
文档 54 「真题讲解」左叶子之和

知识点: 1.二叉树 2.递归

树(四)
挑战 49 「真题练习」二叉树的层序遍历
文档 55 「真题讲解」二叉树的层序遍历

知识点: 1.广度优先遍历

挑战 50 「真题练习」二叉树的右视图
文档 56 「真题讲解」二叉树的右视图

知识点: 1.广度优先遍历

挑战 51 「真题练习」二叉树的层平均值
文档 57 「真题讲解」二叉树的层平均值

知识点: 1.广度优先遍历

挑战 52 「真题练习」填充每个节点的下一个右侧节点
文档 58 「真题讲解」填充每个节点的下一个右侧节点

知识点: 1.广度优先遍历

挑战 53 「真题练习」N 叉树的层序遍历
文档 59 「真题练习」N 叉树的层序遍历

知识点: 1.广度优先遍历

挑战 54 「真题练习」在每个树行中找最大值
文档 60 「真题讲解」在每个树行中找最大值

知识点: 1.广度优先遍历

树(五)
挑战 55 「真题练习」验证二叉搜索树
文档 61 「真题讲解」验证二叉搜索树

知识点: 1.二叉搜索树

挑战 56 「真题练习」恢复二叉搜索树
文档 62 「真题讲解」恢复二叉搜索树

知识点: 1.二叉搜索树

挑战 57 「真题练习」将有序数组转换为二叉搜索树
文档 63 「真题讲解」将有序数组转换为二叉搜索树

知识点: 1.二叉搜索树

挑战 58 「真题练习」有序链表转换为二叉搜索树
文档 64 「真题讲解」有序链表转换为二叉搜索树

知识点: 1.二叉搜索树 2.链表的中间节点

树(六)
挑战 59 「真题练习」二叉搜索树中第 K 小的元素
文档 65 「真题讲解」二叉搜索树中第 K 小的元素

知识点: 1.二叉搜索树

挑战 60 「真题练习」二叉搜索树中的搜索
文档 66 「真题讲解」二叉搜索树中的搜索

知识点: 1.二叉搜索树

挑战 61 「真题练习」二叉搜索树中的插入操作
文档 67 「真题讲解」二叉搜索树中的插入操作

知识点: 1.二叉搜索树

挑战 62 「真题练习」最大二叉树
文档 68 「真题讲解」最大二叉树

知识点: 1.二叉搜索树

贪心
文档 69 「学一学」贪心算法

知识点: 1.贪心算法

挑战 63 「真题练习」柠檬水找零
文档 70 「真题讲解」柠檬水找零

知识点: 1.贪心算法

挑战 64 「真题练习」跳跃游戏
文档 71 「真题讲解」跳跃游戏

知识点: 1.贪心算法

挑战 65 「真题练习」分发饼干
文档 72 「真题讲解」分发饼干

知识点: 1.贪心算法

挑战 66 「真题练习」买卖股票的最佳时机
文档 73 「真题讲解」买卖股票的最佳时机

知识点: 1.贪心算法

回溯(上)
文档 74 「学一学」回溯和剪枝

知识点: 1.回溯算法 2.剪枝

挑战 67 「真题练习」电话号码的字母组合
文档 75 「真题讲解」电话号码的字母组合

知识点: 1.回溯算法

挑战 68 「真题练习」组合总和
文档 76 「真题讲解」组合总和

知识点: 1.回溯算法

挑战 69 「真题练习」组合
文档 77 「真题讲解」组合

知识点: 1.回溯算法

挑战 70 「真题练习」全排列
文档 78 「真题讲解」全排列

知识点: 1.回溯算法

挑战 71 「真题练习」全排列 II
文档 79 「真题讲解」全排列 II

知识点: 1.回溯算法

回溯(下)
挑战 72 「真题练习」分割回文串
文档 80 「真题讲解」分割回文串

知识点: 1.回溯算法

挑战 73 「真题练习」复原 IP 地址
文档 81 「真题讲解」复原 IP 地址

知识点: 1.回溯算法

挑战 74 「真题练习」子集
文档 82 「真题讲解」子集

知识点: 1.回溯算法

挑战 75 「真题练习」单词搜索
文档 83 「真题讲解」单词搜索

知识点: 1.回溯算法

挑战 76 「真题练习」n 皇后
文档 84 「真题讲解」n 皇后

知识点: 1.回溯算法

动态规划(一)(近期更新)
挑战 77 「真题练习」斐波那契数
文档 85 「真题讲解」斐波那契数

知识点: 1.动态规划

挑战 78 「真题练习」爬楼梯
文档 86 「真题讲解」爬楼梯

知识点: 1.动态规划

挑战 79 「真题练习」使用最小花费爬楼梯
文档 87 「真题讲解」使用最小花费爬楼梯

知识点: 1.动态规划

挑战 80 「真题练习」不同路径
文档 88 「真题讲解」不同路径

知识点: 1.动态规划

挑战 81 「真题练习」不同路径 II
文档 89 「真题讲解」不同路径 II

知识点: 1.动态规划

动态规划(二)(写作中 12.02 开放)
挑战 82 「真题练习」打家劫舍
文档 90 「真题讲解」打家劫舍
挑战 83 「真题练习」打家劫舍 II
文档 91 「真题讲解」打家劫舍 II
挑战 84 「真题练习」打家劫舍 III
文档 92 「真题讲解」打家劫舍 III
动态规划(三)(写作中 12.09 开放)
挑战 85 「真题练习」买卖股票的最佳时机
文档 93 「真题讲解」买卖股票的最佳时机
挑战 86 「真题练习」买卖股票的最佳时机 II
文档 94 「真题讲解」买卖股票的最佳时机 II
挑战 87 「真题练习」买卖股票的最佳时机 III
文档 95 「真题讲解」买卖股票的最佳时机 III
挑战 88 「真题练习」买卖股票的最佳时机含手续费
文档 96 「真题讲解」买卖股票的最佳时机含手续费
动态规划(四)(写作中 12.16 开放)
挑战 89 「真题练习」最长公共子序列
文档 97 「真题讲解」最长公共子序列
挑战 90 「真题练习」判断子序列
文档 98 「真题讲解」判断子序列
挑战 91 「真题练习」最长递增子序列
文档 99 「真题讲解」最长递增子序列
挑战 92 「真题练习」最长连续递增序列
文档 100 「真题讲解」最长连续递增序列
挑战 93 「真题练习」不同的子序列
文档 101 「真题讲解」不同的子序列
动态规划(五)(写作中 12.23开放)
挑战 94 「真题练习」零钱兑换
文档 102 「真题讲解」零钱兑换
挑战 95 「真题练习」零钱兑换 II
文档 103 「真题讲解」零钱兑换 II
挑战 96 「真题练习」最大子数组和
文档 104 「真题讲解」最大子数组和
挑战 97 「真题练习」字符串删除距离
文档 105 「真题讲解」字符串删除距离
其他(写作中 12.30 开放)
挑战 98 「真题练习」2 的幂
文档 106 「真题讲解」2 的幂
挑战 99 「真题练习」只出现一次的数字
文档 107 「真题讲解」只出现一次的数字
文档 108 「学一学」位运算
挑战 100 「真题练习」LRU 缓存
文档 109 「真题讲解」LRU 缓存
挑战 101 「真题练习」每日温度
文档 110 「真题讲解」每日温度
挑战 102 「真题练习」接雨水
文档 111 「真题讲解」接雨水
挑战 103 「真题练习」滑动窗口的最大值
文档 112 「真题讲解」滑动窗口的最大值
挑战 104 「真题练习」数组中的第 K 个最大元素
文档 113 「真题讲解」数组中的第 K 个最大元素
热门手写类面试题挑战
共77个章节
数据类型(上)
挑战 105 「真题练习」实现类型判断
实验 6 「真题讲解」实现类型判断

知识点: 1.JavaScript数据类型 2.判断JavaScript数据类型的几种方法

挑战 106 「真题练习」实现 instanceof
实验 7 「真题讲解」实现 instanceof

知识点: 1.原型和原型链 2.instanceof原理

挑战 107 「真题练习」实现 Object.is
实验 8 「真题讲解」实现 Object.is

知识点: 1.==、===和Objectis的区别 2.JS类型转换机制

数据类型(下)
挑战 108 「真题练习」实现大整数相加
文档 114 「真题讲解」实现大整数相加

知识点: 1.模拟竖式加法运算 2.BigInt 3.小数计算精度问额 4.四舍五入问题

挑战 109 「真题练习」实现 lodash 的 get 方法
文档 115 「真题讲解」实现 lodash 的 get 方法

知识点: 1.lodashget方法 2.可选链

挑战 110 「真题练习」判断对象是否为空
文档 116 「真题讲解」判断对象是否为空

知识点: 1.forin 2.Objectkeys() 3.JSONstringify()

挑战 111 「真题练习」实现深拷贝
实验 9 「真题讲解」实现深拷贝

知识点: 1.浅拷贝 2.深拷贝

数组
挑战 112 「真题练习」生成数组
文档 117 「真题讲解」生成数组

知识点: 1.Arrayfrom 2.伪数组转数组

挑战 113 「真题练习」数组去重
文档 118 「真题讲解」数组去重

知识点: 1.Set 2.对象数组去重

挑战 114 「真题练习」实现数组扁平化
文档 119 「真题讲解」实现数组扁平化

知识点: 1.flat 2.递归

挑战 115 「真题练习」实现 reduce
文档 120 「真题讲解」实现 reduce

知识点: 1.reduce原理 2.reduce的使用场景

字符串(上)
文档 121 「正则表达式导学」

知识点: 1.正则表达式

实验 10 「学一学」正则表达式(一)

知识点: 1.简单模式 2.特殊字符 3.转义字符 4.字符集

实验 11 「学一学」正则表达式(二)

知识点: 1.特殊字符 2.量词

实验 12 「学一学」正则表达式(三)

知识点: 1.分组 2.分支 3.断言 4.查找

字符串(下)
挑战 116 「真题练习」实现 repeat
文档 122 「真题讲解」实现 repeat

知识点: 1.repeat 2.二分法

挑战 117 「真题练习」实现模板字符串解析
文档 123 「真题讲解」实现模板字符串解析

知识点: 1.模板字符串 2.正则表达式

挑战 118 「真题练习」实现 HTML 转义
文档 124 「真题讲解」实现 HTML 转义

知识点: 1.HTML转义 2.HTML反转义

挑战 119 「真题练习」查找文章中出现次数最多的单词
文档 125 「真题讲解」查找文章中出现次数最多的单词

知识点: 1.正则 2.reduce 3.sort

对象(上)
挑战 120 「真题练习」解析 url 参数为对象
文档 126 「真题讲解」解析 url 参数为对象

知识点: 1.url参数

挑战 121 「真题练习」判断两个对象是否相等
文档 127 「真题讲解」判断两个对象是否相等

知识点: 1.JSONstringify 2.引用类型

挑战 122 「真题练习」实现对象扁平化
文档 128 「真题讲解」实现对象扁平化

知识点: 1.递归 2.正则

挑战 123 「真题练习」实现 new 操作符
文档 129 「真题讲解」实现 new 操作符

知识点: 1.new 2.原型链 3.this

对象(下)
挑战 124 「真题练习」广度优先遍历 DOM 树
文档 130 「真题讲解」广度优先遍历 DOM 树

知识点: 1.广度优先遍历 2.多叉树

挑战 125 「真题练习」深度优先遍历 DOM 树
文档 131 「真题讲解」深度优先遍历 DOM 树

知识点: 1.深度优先遍历 2.多叉树

挑战 126 「真题练习」列表整理为树形结构
文档 132 「真题讲解」列表整理为树形结构

知识点: 1.树形结构 2.空间换时间 3.递归

函数(上)
实验 13 「学一学」this

知识点: 1.this 2.call、apply、bind

挑战 127 「真题练习」实现 call 函数
文档 133 「真题讲解」实现 call 函数

知识点: 1.call原理 2.call使用场景

挑战 128 「真题练习」实现 apply 函数
文档 134 「真题讲解」实现 apply 函数

知识点: 1.apply原理 2.apply使用场景

挑战 129 「真题练习」实现 bind 函数
文档 135 「真题讲解」实现 bind 函数

知识点: 1.bind原理 2.bind使用场景

函数(下)
挑战 130 「真题练习」实现自增函数
文档 136 「真题讲解」实现自增函数

知识点: 1.闭包 2.作用域和作用域链 3.函数的本质是对象

文档 137 「学一学」闭包的应用场景(上)

知识点: 1.闭包 2.立即执行函数 3.缓存 4.单例模式

文档 138 「学一学」闭包的应用场景(下)

知识点: 1.柯里化函数 2.偏函数 3.webpack打包 4.jquery和lodash中的闭包

挑战 131 「真题练习」实现 compose 函数
文档 139 「真题讲解」实现 compose 函数

知识点: 1.compose 2.pipe

挑战 132 「真题练习」实现防抖函数
文档 140 「真题讲解」实现防抖函数

知识点: 1.函数防抖 2.函数节流

异步(上)
实验 14 「学一学」异步

知识点: 1.同步与异步 2.promise 3.async/await

实验 15 「学一学」事件循环

知识点: 1.事件循环 2.任务队列 3.宏任务与微任务

实验 16 「真题练习」Promise 相关

知识点: 1.Promise

实验 17 「真题练习」事件循环相关

知识点: 1.Promise 2.事件循环

挑战 133 「真题练习」setTimeout 实现 setInterval
文档 141 「真题讲解」setTimeout 实现 setInterval

知识点: 1.setInterval 2.setTimeout

异步(下)
挑战 134 「真题练习」实现 Promise(上)
文档 142 「真题讲解」实现 Promise(上)

知识点: 1.Promise的三种状态及状态变化 2.resolve和reject 3.then和catch

挑战 135 「真题练习」实现 Promise(下)
文档 143 「真题讲解」实现 Promise(下)

知识点: 1.Promiseresolve 2.Promisereject 3.Promiseall 4.Promiserace

挑战 136 「真题练习」Promise 限制异步操作并发数
文档 144 「真题讲解」Promise 限制异步操作并发数

知识点: 1.Promise 2.队列

挑战 137 「真题练习」实现 async 函数
文档 145 「真题讲解」实现 async 函数

知识点: 1.async/await 2.Generator

课程教师

王楷 共发布过 1 门课程

某大型物联网国企前端工程师,算法深度爱好者,对于算法面试有丰富经验,曾收获多家大厂 offer,如知名大厂字节跳动、腾讯、华为、百度、CVTE等。

查看老师的所有课程 >
开通会员,即刻开始学习
加入社群
加入编程交流社群