剑指offer 汇总版
数组
3 数组中重复的数字
- 1数组下标法
- 2哈希map
- 3(不改变原数组,空间O(1),二分查找,如1-8,看1-4出现的次数是否大于4,,出现则说明有重复数字)
题解
4 二维数组中的查找
- 1暴力搜素
- 2从右上角开始找,确定while的循环条件(越界)
题解
5 替换空格
‘ ’替换为“%20”
- 新的vector,遇到空格push(%20),空间复杂度O(N)
- 求出扩展后的总长度,倒序push O(1)
二分查找
11 旋转数组的最小数字
- 1暴力搜索
- 2二分查找
链表
6 从尾到头打印链表
- 栈
- 递归
二叉树
7 重建二叉树
- 前序中序,递归
8 二叉树的下一个节点
- 有无右孩子,有的话就是右孩子的最左,否则就迭代找当前节点是否是父节点的左,最顶层的父节点就是要找的
9 两个栈实现队列
递归-动态规划
10-1 斐波那契数列
- 递归版:从上到下
- 动态规划:从下到上
- 贪心算法:是否存在特殊的选择
10-2 青蛙跳
- 经典的跳
f(n) = f(n - 1) + f(n - 2);
- 不能连续两次跳两节
f(n) = f(n - 1) + f(n - 3);
10-3 变态跳
f(n) = pow(2, n - 1);