「剑指 Offer」是何海涛写的一本算法面试书,书中精选了 50 道常见的程序员面试题,这些题目偏向中低难度,是入门上手不错的选择。另外这些题目基本上在各大 OJ 上也都有,可以非常方便地提交自己的实现进行练手。
如果刚开始练习算法题目,「剑指 Offer」是个不错的切入点。以下是 AlgoCasts 上对应这 50 道题目的讲解视频。以下内容也放在了 GitHub 上:剑指 Offer 50 题视频讲解
注意:讲解视频中的题目可能和剑指 Offer 书上的题目有些许不同,不保证 100% 一致。 另外,在我看来,有些题目练习的意义不大,已经使用删除线移除。
二维数组中的查找
行列递增的二维数组搜索 - leetcode 240 | lintcode 38
替换空格
替换空格
从尾到头打印链表
从尾到头打印链表
重建二叉树
用前序和中序遍历序列构建二叉树 - leetcode 105 | lintcode 73
用两个栈实现队列
使用栈实现队列 - leetcode 232 | lintcode 40
旋转数组的最小数字
旋转有序数组的最小值 - leetcode 153 | lintcode 159
斐波那契数列
第 n 个斐波那契数 - leetcode 509 | lintcode 366
二进制中 1 的个数
二进制中 1 的个数 - leetcode 191 | lintcode 1332
数值的整数次方
数值的 n 次方 - leetcode 50 | lintcode 428
打印 1 到最大的 n 位数
打印 1 到最大的 n 位数
在 O(1) 时间删除链表节点
删除链表节点 - leetcode 237 | lintcode 372
调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面
链表中倒数第 k 个节点
移除单链表倒数第 n 个节点 - leetcode 19 | lintcode 174
反转链表
反转单链表 - leetcode 206 | lintcode 35
合并两个排序的链表
合并两个有序链表 - leetcode 21 | lintcode 165
树的子结构
树 t 是否等于树 s 的子树 - leetcode 572 | lintcode 1165 // 注意:视频中这道题目只是类似,但不相同,区别在于「子结构」和「子树」。
二叉树的镜像
翻转二叉树 - leetcode 226 | lintcode 175
顺时针打印矩阵
矩阵的螺旋遍历 - leetcode 54 | lintcode 374
包含 min 函数的栈
带有 min 函数的栈 - leetcode 155 | lintcode 12
栈的压入弹出序列
验证入栈出栈序列 - leetcode 946
从上往下打印二叉树
二叉树的层序遍历 - leetcode 102 | lintcode 69
二叉搜索树的后序遍历序列
验证二叉搜索树的前序遍历序列 - lintcode 1307 // 相似题
二叉树中和为某一值的路径
二叉树中和为给定值的路径 - leetcode 113 | lintcode 246
复杂链表的复制
含随机指针的链表拷贝 - leetcode 138 | lintcode 105
二叉搜索树与双向链表
TODO - leetcode 426 | lintcode 378
字符串的排列
数组的全排列 - leetcode 46 | lintcode 15
数组中出现次数超过一半的数字
数组中超过一半的数字 - leetcode 169 | lintcode 46
最小的 k 个数
数组中第 K 大的元素 - leetcode 215 | lintcode 5
连续子数组的最大和
连续子序列的最大和 - leetcode 53 | lintcode 41
从 1 到 n 整数中 1 出现的次数
整数 1 到 n 中 1 出现的次数 - leetcode 233 | lintcode 1312
把数组排成最小的数
把数组排成最小的数
丑数
第 n 个丑数 - leetcode 264 | lintcode 4
第一个只出现一次的字符
第一个只出现一次的字符 - leetcode 387 | lintcode 209
数组中的逆序对
逆序对 | lintcode 532
两个链表的第一个公共节点
链表的相交节点 - leetcode 160 | lintcode 380
数字在排序数组中出现的次数
有序数组中查找数字的开始和结束下标 - leetcode 34 | lintcode 61
二叉树的深度
二叉树的最大深度 - leetcode 104 | lintcode 97
平衡二叉树
判断二叉树是否平衡 - leetcode 110 | lintcode 93
数组中只出现一次的数字
只出现一次的两个数字 - leetcode 260 | lintcode 84
和为 s 的两个数字
有序数组中求和为给定值的两个数 - leetcode 167 | lintcode 608
和为 s 的连续正数序列
和为 s 的连续正数序列
翻转单词顺序
翻转单词顺序 - leetcode 151 | lintcode 53
左旋转字符串
旋转数组 - leetcode 189 | lintcode 1334
n 个骰子的点数
n 个骰子的点数
扑克牌的顺子
扑克牌的顺子
圆圈中最后剩下的数字
圆圈中最后剩下的数字
求 1+2+..+n
求 1+2+..+n
不用加减乘除做加法
不用+/-求两数之和 - leetcode 371
把字符串转成整数
字符串转整数 - leetcode 8 | lintcode 54
树中两个节点的最低公共祖先
二叉树中节点的最近公共祖先 - leetcode 236 | lintcode 88
声明:自由转载-非商用-非衍生-保持署名 | 创意共享3.0许可证,转载请注明作者及出处
出处:http://hawstein.com/2019/01/22/jian-zhi-offer-algocasts-episodes/