【剑指offer】总集

94 阅读6分钟

前言

算法和算法题的任务目标,主要可分为:“增 删 改 查” 这四种。

数据结构则包括:数组,字符串,堆,栈,队列,链表,树,集合等等。

所以在数组,字符串,堆,栈,队列,链表,树,集合等等这些不同的数据结构上,执行 “增 删 改 查”这任意一种(或以上)任务,它们之间只需排列组合一番,就形成了现在数量繁多的算法题目(剑指offer,LeetCode)。前人在解决这些问题时,也逐渐总结形成了针对不同数据结构,执行不同任务时候的一些方法(如:快慢针——链表/查找,二分查找——数组/查找,十排序——数组/修改)。

因此解决剑指offer和LeetCode的题目时,往往是考验我们对其中的算法和数据结构的理解。甚至在特定数据结构中进行的 “增 删 改 查” 操作,所能使用的算法,应该是比较固定的。比如,在有序数组中执行查找任务,我们马上就要想到二分查找。这些经验虽然不一定是百试百灵,但是还是非常实用的。



题目索引

剑指offer虽然牛客和力扣上的题目不太一样,但是建议是两边都要刷。

我的索引结构是:

数据结构1: |____ 任务目标 - 题目1 |____ 任务目标 - 题目2 |____ ...... |____ 特殊算法: |____ |____ 任务目标 - 题目n |____ |____ 任务目标 - 题目n+1 |____ |____ ...... 数据结构2: |____ 任务目标 - 题目1 |____ 任务目标 - 题目2 |____ ...... |____ 特殊算法: |____ |____ 任务目标 - 题目n |____ |____ 任务目标 - 题目n+1 |____ |____ ...... ......


============ 数 ============

查 - 【剑指offer】43. 1~n 整数中 1 出现的次数

查 - 【剑指offer】44. 数字序列中某一位的数字

查 - 【剑指offer】49. 丑数

查 - 【剑指offer】60. n个骰子的点数

查 - 【剑指offer】62. 圆圈中最后剩下的数字

查 - 【剑指offer】64. 求1+2+…+n

分治法 :

        增 - 【剑指offer】16. 数值的整数次方

位运算 :

        查 - 【剑指offer】15. 二进制中1的个数

        增 - 【剑指offer】65. 不用加减乘除做加法

贪心算法 :

        查 - 【剑指offer】14.1. 剪绳子

        查 - 【剑指offer】14.2. 剪绳子 II

动态规划 :

        查 - 【剑指offer】46. 把数字翻译成字符串



============ 数组 ============

查 - 【剑指offer】03.数组中重复的数字

查 - 【剑指offer】04. 二维数组中的查找

查 - 【剑指offer】11. 旋转数组的最小数字

查 - 【剑指offer】29. 顺时针打印矩阵

查 - 【剑指offer】39. 数组中出现次数超过一半的数字

查 - 【剑指offer】40. 最小的k个数

改 - 【剑指offer】45. 把数组排成最小的数

查 - 【剑指offer】59. 滑动窗口的最大值

查 - 【剑指offer】61. 扑克牌中的顺子

增 - 【剑指offer】66. 构建乘积数组

动态规划 :

        查 - 【剑指offer】10.1 斐波那契数列

        查 - 【剑指offer】10.2 青蛙跳台阶问题

        查 - 【剑指offer】10.3 矩形覆盖

        查 - 【剑指offer】10.4 变态跳台阶

        查 - 【剑指offer】42. 连续子数组的最大和

        查 - 【剑指offer】47. 礼物的最大价值

二分法 :

        查 - 【剑指offer】11. 旋转数组的最小数字

        查 - 【剑指offer】53. 数字在排序数组中出现的次数

        查 - 【剑指offer】53.2 0~n-1中缺失的数字

回溯搜索/DFS/BFS:

        查 - 【剑指offer】12. 矩阵中的路径

        查 - 【剑指offer】13. 机器人的运动范围

排序:

        改 - 【剑指offer】21. 调整数组顺序使奇数位于偶数前面

        查 - 【剑指offer】51. 数组中的逆序对

位运算 :

        查 - 【剑指offer】56. 数组中数字出现的次数

        查 - 【剑指offer】56.2 数组中数字出现的次数

双指针:

        查 - 【剑指offer】57. 和为s的两个数字

        查 - 【剑指offer】57.2 和为s的两个数字

贪心算法 :

        查 - 【剑指offer】63. 股票的最大利润



============ 字符串 ============

改 - 【剑指offer】05. 替换空格

查 - 【剑指offer】17. 打印从1到最大的n位数

查 - 【剑指offer】20. 表示数值的字符串

改 - 【剑指offer】37. 序列化二叉树

查 - 【剑指offer】50. 第一个只出现一次的字符

改 - 【剑指offer】58. 翻转单词顺序

改 - 【剑指offer】58.2 左旋转字符串

改 - 【剑指offer】67. 把字符串转换成整数

动态规划 :

        查 - 【剑指offer】19. 正则表达式匹配

回溯搜索 :

        查 - 【剑指offer】38. 字符串的排列

双指针:

        查 - 【剑指offer】48. 最长不含重复字符的子字符串



============ 链表 ============

查 - 【剑指offer】06. 从尾到头打印链表

改 - 【剑指offer】24. 反转链表

改 - 【剑指offer】25. 合并两个排序的链表

改 - 【剑指offer】35. 复杂链表的复制

查 - 【剑指offer】52. 两个链表的第一个公共结点

双指针法:

        删 - 【剑指offer】18. 删除链表的节点

        删 - 【剑指offer】18.2 删除链表中重复的结点

        查 - 【剑指offer】22. 链表中倒数第k个节点



============ 树 ============

增 - 【剑指offer】07. 重建二叉树

查 - 【剑指offer】08. 二叉树的下一个结点

查 - 【剑指offer】26. 树的子结构

改 - 【剑指offer】27. 二叉树的镜像

查 - 【剑指offer】28. 对称的二叉树

查 - 【剑指offer】32.1 从上到下打印二叉树

查 - 【剑指offer】32.2 从上到下打印二叉树2

查 - 【剑指offer】32.3 从上到下打印二叉树3 / 按之字形顺序打印二叉树

查 - 【剑指offer】34. 二叉树中和为某一值的路径

改 - 【剑指offer】37. 序列化二叉树

查 - 【剑指offer】55. 二叉树的深度

查 - 【剑指offer】68.2 二叉树的最近公共祖先

二叉搜索树(BST):

        查 - 【剑指offer】33. 二叉搜索树的后序遍历序列

        改 - 【剑指offer】36. 二叉搜索树与双向链表

        查 - 【剑指offer】54. 二叉搜索树的第k大节点

        查 - 【剑指offer】68. 二叉搜索树的最近公共祖先

二叉平衡树(AVL):

        查 - 【剑指offer】55.2 平衡二叉树



============ 队列 栈 堆 ============

增 - 【剑指offer】09. 用两个栈实现队列

增 - 【剑指offer】30. 包含min函数的栈

查 - 【剑指offer】31. 栈的压入、弹出序列

查 - 【剑指offer】41. 数据流中的中位数

增 - 【剑指offer】59.2 队列的最大值