「剑指 Offer」是何海涛写的一本算法面试书,书中精选了 50 道常见的程序员面试题,这些题目偏向中低难度,是入门上手不错的选择。另外这些题目基本上在各大 OJ 上也都有,可以非常方便地提交自己的实现进行练手。
如果刚开始练习算法题目,「剑指 Offer」是个不错的切入点。以下是 AlgoCasts 上对应这 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 位数- 在 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
- 二叉搜索树与双向链表 - 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 的连续正数序列
- 翻转单词顺序 - 翻转单词顺序 - leetcode 151 | lintcode 53
- 左旋转字符串 - 旋转数组 - leetcode 189 | lintcode 1334
n 个骰子的点数扑克牌的顺子圆圈中最后剩下的数字求 1+2+..+n- 不用加减乘除做加法 - 不用+/-求两数之和 - leetcode 371
- 把字符串转成整数 - 字符串转整数 - leetcode 8 | lintcode 54
- 树中两个节点的最低公共祖先 - 二叉树中节点的最近公共祖先 - leetcode 236 | lintcode 88