剑指offer算法

Posted by Shen Chaoran on August 11, 2018
  1. 二维数组的查找:每行向右递增,每列向下递增 从左下角开始,如果大于当前值向右移,如果小于当前值向上移
  2. 替换空格
  3. 从尾到头打印链表
  4. 根据二叉树的前序序列和中序序列重建二叉树
    • 获取前序序列的第一个为树顶
    • 查找树顶在中序中的位置,可以将中序序列分为两份:左子树和有子树
    • 根据左子树和右子树的长度找到前序序列中对应的子树部分,递归求解
  5. 两个栈实现队列
  6. 旋转数组的最小数字
  7. 斐波那契数列
  8. 青蛙跳台阶: DP transition: fn(n) = fn(n-1) + fn(n-2)
  9. 变态跳台阶: 因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级 跳1级,剩下n-1级,则剩下跳法是f(n-1) 跳2级,剩下n-2级,则剩下跳法是f(n-2) 所以f(n)=f(n-1)+f(n-2)+…+f(1) 因为f(n-1)=f(n-2)+f(n-3)+…+f(1) 所以f(n)=2*f(n-1)
  10. 矩形覆盖
  11. 二进制树中1的个数:用1不断左位移当做滑动窗口与原数字做与操作
  12. 数值的整数次方
  13. 调整数组顺序使奇数位于偶数前面
  14. 链表的倒数第k个数字:两个游标相距k,同时向后移动
  15. 反转链表
  16. 合并两个有序的链表:归并
  17. 树的子结构:递归判断是否为子树,当且紧当当前节点、当前节点的左节点、当前节点的右节点都相等时才为真
  18. 二叉树的镜像
  19. 顺序/回形打印矩阵:注意矩阵边界
  20. 包含min函数的栈
  21. 栈的压入、弹出序列
  22. 从上往下打印二叉树: 树的广度优先遍历,借助队列实现
  23. 二叉搜索树的后序遍历序列