剑指offer题目思路总结

该剑指offer系列所对应的代码都在 剑指offer题目代码总结

原题号题目数据结构思路注意点及相关题目
(简单)剑指 Offer 03. 数组中重复的数字数组1.(暴力法 不可取) 两次遍历
2. 在哈希表中添加数据,统计各元素个数,遍历hashmap,找到重复的数字
3.在哈希表中添加数据,如果表中已经有该项,直接返回即可(官方题解用的集合,集合添加失败返回即可) 时间复杂度:O(n) 空间复杂度:O(n)
240(简单)剑指 Offer 04. 二维数组中的查找数组1.(暴力法) 时间复杂度:O(nm) 空间复杂度:O(1)
2.线性查找 从左上角或右下角开始查找 时间复杂度:O(n+m) 空间复杂度:O(1)
3.二分法查找 没看 240官方题解
(简单)剑指 Offer 05. 替换空格字符串1.替换函数
2.数空格,直接申请定长字符串
3.StringBuilder申请变长 时间复杂度:O(N) 空间复杂度:O(N)
4.先申请原字符串长度3倍的字符串,复制完之后再按实际长度复制回去 时间复杂度:O(n) 空间复杂度:O(n)
(简单)剑指 Offer 06. 从尾到头打印链表链表1.两次遍历链表
2.辅助栈 时间复杂度:O(n) 空间复杂度:O(n)
3.递归法 先走至链表末端,回溯时依次将节点值加入列表 ,这样就可以实现链表值的倒序输出 精选题解
时间复杂度 O(N): 遍历链表,递归 N 次。
空间复杂度 O(N): 系统递归需要使用 O(N) 的栈空间。

(剑指offer)1.第一反应 把链表中链接节点的指针反转过来,改变链表的方向,然后从头到尾输出 但是这样会改变链表的结构
(剑指offer)2.辅助栈 用栈基于循环实现的代码鲁棒性要好一些
(剑指offer)3.递归法 递归在本质上就是一个栈结构 基于递归的代码看起来简洁,但是当链表非常长的时候,就会导致函数调用的层级很深,从而有可能导致函数调用栈溢出
复习时自己实现了一遍
105(中等)剑指 Offer 07. 重建二叉树(根据前序和中序遍历)1.递归法 用一个 Map 存储中序遍历的每个元素及其对应的下标,使用hashmap提高搜索效率 时间复杂度:O(n) 空间复杂度:O(n)
2.迭代法 使用栈保存遍历过的节点 时间复杂度:O(n) 空间复杂度:O(n) 只大概看了一下 官方题解

(剑指offer)递归法
(简单)剑指 Offer 09. 用两个栈实现队列栈 队列deque和linkedlist实现栈 利用双栈,一个栈支持插入操作,一个栈支持删除操作
时间复杂度:对于插入和删除操作,时间复杂度均为 O(1)。插入不多说,对于删除操作,虽然看起来是 O(n)O(n) 的时间复杂度,但是仔细考虑下每个元素只会「至多被插入和弹出 stack2 一次」,因此均摊下来每个元素被删除的时间复杂度仍为 O(1)。
空间复杂度:O(n)。需要使用两个栈存储已有的元素。

(剑指offer)双栈法 同上
拓展:用两个队列实现栈
509(简单)剑指 Offer 10- I. 斐波那契数列dp1.递归(超时) 时间复杂度:O(2^N) 空间复杂度:O(N)
2.记忆化递归 时间复杂度:O(n) 空间复杂度:O(n)
3.动态规划 时间复杂度:O(n) 空间复杂度:O(n)
4.动态规划空间优化 时间复杂度:O(n) 空间复杂度:O(1)
5.矩阵求幂 没看 509官方题解
6.公式法 没看
复习时自己实现了一遍
70(简单)剑指 Offer 10- II. 青蛙跳台阶问题dp思路同上dp相关题目:安安总结
154. 寻找旋转排序数组中的最小值 II(简单) 剑指 Offer 11. 旋转数组的最小数字数组查找二分法相关题目:
153. 寻找旋转排序数组中的最小值
33. 搜索旋转排序数组
81. 搜索旋转排序数组 II
79. 单词搜索(中等)剑指 Offer 12. 矩阵中的路径矩阵矩阵搜索问题
dfs+回溯剪枝 偏移量数组
200. 岛屿数量矩阵网格问题 岛屿系列问题
1.dfs 通用解法
2.bfs
3.并查集 没看
类似题目:
695. 岛屿的最大面积
463. 岛屿的周长
827. 最大人工岛
130.被围绕的区域
(中等)剑指 Offer 13. 机器人的运动范围矩阵矩阵搜索问题
dfs
bfs
343. 整数拆分(中等)剑指 Offer 14- I. 剪绳子1.递归 超时
2.动态规划
剑指 Offer 14- II. 剪绳子 II大数求余
1.贪心 快速幂求余
2.BigInteger
191(简单)剑指 Offer 15. 二进制中1的个数方法一:逐位判断
方法二:巧用 n & (n - 1)n&(n−1)
(中等)剑指 Offer 16. 数值的整数次方快速幂 时间: O ( l o g 2 n ) O(log_2n) O(log2n) 空间: O ( 1 ) O(1) O(1)
剑指 Offer 17. 打印从1到最大的n位数普通打印
大数问题:全排列 字符串
剑指 Offer 18. 删除链表的节点链表普通遍历删除
新思路:根据删除节点,直接删除
新思路类型题:面试题 02.03. 删除中间节点
(简单)剑指 Offer 21. 调整数组顺序使奇数位于偶数前面数组1.头尾指针 题解1 题解2
2.快慢指针 题解1
同类型问题扩展 解耦 lambda表达式
(简单)剑指 Offer 22. 链表中倒数第k个节点链表快慢指针 鲁棒性 要考虑特殊情况
206(简单)剑指 Offer 24. 反转链表链表206官方题解
1. 迭代 修改next指针
2.递归
21剑指 Offer 25. 合并两个排序的链表链表21官方题解
1.迭代
2.递归
剑指 Offer 26. 树的子结构递归匹配类二叉树题目总结
安安总结
面04.10(572)
剑指offer28(101)
100
1367(没看)
101剑指 Offer 28. 对称的二叉树101官方题解
1.递归
2.非递归 (队列)
226剑指 Offer 27. 二叉树的镜像226官方题解(递归 队列)
大佬题解(栈)
1.递归
2.非递归(栈 队列)
剑指 Offer 32 - I. 从上到下打印二叉树队列(BFS)二叉树层级遍历(BFS)
剑指 Offer 32 - II. 从上到下打印二叉树 II1.队列(BFS) 相比于上一题加了一个循环 参考
2.递归(通过DFS来实现) 参考
BFS 的使用场景总结:层序遍历、最短路径问题 最短路径部分没看
剑指 Offer 32 - III. 从上到下打印二叉树 III1.双端队列(BFS)
2.递归 首尾两头添加
双栈法 (剑指offer)
155剑指 Offer 30. 包含min函数的栈1.辅助栈和数据栈同步 155官方题解
2.辅助栈和数据栈不同步(要考虑新来的数等于辅助栈栈顶元素的时候) 参考题解
54剑指 Offer 29. 顺时针打印矩阵矩阵1.模拟矩阵路径
2.按层模拟
946剑指 Offer 31. 栈的压入、弹出序列模拟
剑指 Offer 33. 二叉搜索树的后序遍历序列1.递归分治
2.辅助栈 (没看)
113. 路径总和 II剑指 Offer 34. 二叉树中和为某一值的路径dfs二叉树搜索问题
112.路径总和
437.路径总和III
138剑指 Offer 35. 复杂链表的复制1.哈希表 时间复杂度:O(N) 空间复杂度:O(N)
2.原地复制 时间复杂度:O(N) 空间复杂度:O(1)
剑指 Offer 38. 字符串的排列全排列46
47
169剑指 Offer 39. 数组中出现次数超过一半的数字摩尔投票法
剑指 Offer 40. 最小的k个数top K问题
1.大根堆
2.利用快排思想,但不需要对所有元素都进行排序
类似题目:
215. 数组中的第K个最大元素
53剑指 Offer 42. 连续子数组的最大和动态规划
233剑指 Offer 43. 1~n整数中1出现的次数数学法 找规律 分为三种情况:等于1 等于0 大于1
400剑指 Offer 44. 数字序列中某一位的数字数学法 找规律 参考题解
剑指 Offer 45. 把数组排成最小的数自定义排序规则
剑指 Offer 46. 把数字翻译成字符串dp
剑指 Offer 47. 礼物的最大价值dp 像一维数组一样,多开一点空间,有利于边界条件的判断
3剑指 Offer 48. 最长不含重复字符的子字符串滑动窗口 参考题解
动态规划 参考题解
滑动窗口题目总结 (没看)
264剑指 Offer 49. 丑数动态规划
剑指 Offer 50. 第一个只出现一次的字符哈希表
有序哈希表
160剑指 Offer 52. 两个链表的第一个公共节点哈希表
双指针浪漫相遇
剑指 Offer 54. 二叉搜索树的第k大节点遍历顺序:右根左 则输出顺序即从大到小
104剑指 Offer 55 - I. 二叉树的深度DFS递归
BFS
相似题目:从上到下打印二叉树
110剑指 Offer 55 - II. 平衡二叉树DFS递归
利用特殊值进行剪枝,提前返回
剑指 Offer 53 - I. 在排序数组中查找数字 I二分查找 寻找左右边界 三种解法 安安题解排序数组中的搜索问题,首先想到 二分法 解决。
二分查找规律
安安总结二分查找规律
剑指 Offer 53 - II. 0~n-1中缺失的数字二分查找 类似于上题的±0.5 因此都是数组中不存在那个数值的情况
剑指 Offer 56 - I. 数组中数字出现的次数异或本题的基础题:136. 只出现一次的数字
剑指 Offer 56 - II. 数组中数字出现的次数 II位运算+逐位统计 参考题解
剑指 Offer 57. 和为s的两个数字双指针
改进:二分法+双指针
剑指 Offer 57 - II. 和为s的连续正数序列双指针 (滑动窗口)
151剑指 Offer 58 - I. 翻转单词顺序1.API
2.双指针 参考题解
3.先反转所有字符,再反转各个单词(剑指offer) 151 official
栈 定位单词边界
剑指 Offer 58 - II. 左旋转字符串1. 三次翻转
2.字符串拼接+求余简化代码
剑指 Offer 60. n个骰子的点数参考题解
dp二维数组
dp空间优化为一维数组 (此处和其他地方不一样,其他地方都是优化为两行n列的二维数组)
剑指 Offer 61. 扑克牌中的顺子数组1.普通思路:判断0的个数和所需的0的个数
2.巧妙思路:找到最大值和最小值,判断max-min < 5 参考题解
剑指 Offer 65. 不用加减乘除做加法位运算 参考题解
剑指 Offer 66. 构建乘积数组1.暴力法
2.双指针
剑指 Offer 67. 把字符串转换成整数1.正则这个题解下面的一个评论
2.直接遍历判断(注意越界情况) 参考题解
这道题目如果只是简单地字符串转整数的话,就是简单地 ans = ans * 10 + digit。但是注意这道题目可能会超过integer的最大表示!也就是说会在某一步 ans * 10 + digit > Integer.MAX_VALUE。*10 和 +digit 都有可能越界,那么只要把这些都移到右边去就可以了。ans > (Integer.MAX_VALUE - digit) / 10 就是越界。
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先要利用二叉搜索树的性质 参考题解
剑指 Offer 68 - II. 二叉树的最近公共祖先递归

C = W ∗ log ⁡ 2 ( 1 + s n ) C=W\ast\log_2\left ( 1+\frac{s}{n} \right ) C=Wlog2(1+ns)

原题号题目范畴思路
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安安csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值