
剑指 Offer 题解
五角钱的程序员
这个作者很懒,什么都没留下…
展开
-
26. 树的子结构(剑指 Offer 题解,面试)
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析查找A中是否存在树B结构一样的子树,可以分为两步:第一步,在树A中找到和树B的根节点的值一样的节点R第二步,判断A中以R为根节点的子树是不是包含和树B一样的结构以上面为例,先在A中找到值为8的节点,接着判断树A的根节点下面的子树是不是含有和树B一样的结构。在A中根节点的左子节点为8,而树B的根节点的左子节点为9,对应两个节点不同。接着找8的节点,在A中第二层找到,然后进行第二步的判断(判断这转载 2020-06-19 16:50:04 · 3226 阅读 · 22 评论 -
四舍六入五凑偶”的修约规则进行修约
修约描述在物理实验中,处理数据时常常需要对结果按照“四舍六入五凑偶”的修约规则进行修约。在本题中,我们需要对一个精度为5位以内的数按照上述规则保留两位小数。例如:9.8249=9.82 (小数点后第三位<5,因此舍去后面) 9.82671=9.83 (小数点后第三位>5,因此进位)9.82501=9.83 (小数点后第三位等于5,但5后非全0,因此进位)9.8351 =9.84 (同上)9.8350=9.84 (小数点后第三位等于5,5后全0凑偶,3为奇数,所以进位)9.8250原创 2020-06-16 23:51:26 · 13013 阅读 · 30 评论 -
25. 合并两个排序的链表(面试)
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4两个有序链表的排序,实际上可以看成一个单链表使用归并排序的最后一个环节:“将两个排好序的子序列合并为一个子序列:每次都是从未比较的两个子序列的最小值中选出一个更小值”。遍历实现package 剑指offer.合并两个排序的链表_25;/*作者 :XiangLi原创 2020-06-16 18:00:58 · 3363 阅读 · 19 评论 -
24. 反转链表(剑指 Offer 题解Java版,面试常考)
要求很简单,输入一个链表,反转链表后,输出新链表的表头。 反转链表是有2种方法(递归法,遍历法)实现的,面试官最爱考察的算法无非是斐波那契数列和单链表反转,递归方法实现链表反转比较优雅,但是对于不了解递归的同学来说还是有理解难度的。转载 2020-06-15 22:11:27 · 2560 阅读 · 10 评论 -
22. 链表中倒数第 K 个结点(剑指 Offer 题解Java版,面试常考)
题目:找出单链表的倒数第K个元素,比如给定单链表:1->2->3->4->5,则链表的倒数第2个元素为4解题思路设链表的长度为 N。设置两个指针 P1 和 P2,先让 P1 移动 K 个节点,则还有 N - K 个节点可以移动。此时让 P1 和 P2 同时移动,可以知道当 P1 移动到链表结尾时,P2 移动到第 N - K 个节点处,该位置就是倒数第 K 个节点。代码package 剑指offer.链表中倒数第个结点_22;/*作者 :XiangLin创建时间原创 2020-06-13 21:44:23 · 3239 阅读 · 20 评论 -
21. 调整数组顺序使奇数位于偶数前面(剑指 Offer 题解Java版,面试常考)
21. 调整数组顺序使奇数位于偶数前面题目描述需要保证奇数和奇数,偶数和偶数之间的相对位置不变,这和书本不太一样。解题思路方法一:创建一个新数组,时间复杂度 O(N),空间复杂度 O(N)。package 剑指offer.调整数组顺序使奇数位于偶数前面_21;/*作者 :XiangLin创建时间 :13/06/2020 14:17文件 :OrderArray.javaIDE :IntelliJ IDEA*/import java.util.Arrays;原创 2020-06-13 15:20:14 · 3416 阅读 · 24 评论 -
20.表示数值的字符串(剑指 Offer 题解Java版,面试遇到好多次)
文章目录题目描述思路思路一:思路二:题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。true“+100”“5e2”“-123”“3.1416”“-1E-16”false“12e”“1a3.14”“1.2.3”“±5”“12e+4.3”思路思路一:利用正则表达式,对字原创 2020-06-11 17:50:37 · 3240 阅读 · 19 评论 -
18.2 删除链表中重复的结点(剑指 Offer 题解Java版)
文章目录题目描述思路一:采用递归的方法去解决代码如下:题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5 处理后为 1->2->5注意重复的结点不保留:并不是将重复结点删除到只剩一个,而是重复结点的全部会被删除。所以链表1->2-&g...原创 2020-04-25 00:14:47 · 260 阅读 · 0 评论 -
18.1 在 O(1) 时间内删除链表节点(剑指 Offer 题解Java版)
文章目录18.1 在 O(1) 时间内删除链表节点题目描述解题思路测试用例18.1 在 O(1) 时间内删除链表节点题目描述给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。解题思路① 如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,时间复杂度为 O(1)。② 否则,就需要先遍历链表,找到节点的前一个...原创 2020-04-03 20:43:06 · 293 阅读 · 0 评论 -
16. 数值的整数次方(剑指 Offer 题解Java版)
文章目录16. 数值的整数次方题目链接题目描述解题思路实现代码16. 数值的整数次方题目链接NowCoder题目描述 给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent,求 base 的 exponent 次方。解题思路  ...原创 2020-03-27 17:52:01 · 227 阅读 · 0 评论 -
15. 二进制中 1 的个数(剑指 Offer 题解Java版)
文章目录15. 二进制中 1 的个数题目链接题目描述思路一. 利用Integer类的bitCount()二. 常规循环三. n&(n-1)15. 二进制中 1 的个数题目链接NowCoder题目描述 任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n...原创 2020-03-26 17:55:50 · 219 阅读 · 0 评论 -
14. 剪绳子(剑指 Offer 题解Java版)
文章目录14. 剪绳子1、 题目链接2、题目描述3、解题思路3.1贪心3.2动态规划14. 剪绳子1、 题目链接Leetcode2、题目描述 把一根绳子剪成多段,并且使得每段的长度乘积最大。n = 2return 1 (2 = 1 + 1)n = 10return 36 (10 = 3 + 3 +...原创 2020-03-18 21:13:50 · 212 阅读 · 0 评论 -
12. 矩阵中的路径(剑指 Offer 题解Java版)
文章目录12. 矩阵中的路径题目描述题目链接解题思路实现代码12. 矩阵中的路径题目描述 判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向上下左右移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。  ...原创 2020-03-10 00:13:28 · 250 阅读 · 0 评论 -
11. 旋转数组的最小数字(剑指 Offer 题解Java版)
文章目录11. 旋转数组的最小数字题目描述题目链接解题思路可以借助下图理解过程代码11. 旋转数组的最小数字题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。题目链接NowCoder解题思路 &...原创 2020-03-06 15:48:40 · 459 阅读 · 0 评论 -
10.3 跳台阶(剑指 Offer 题解Java版)
文章目录10.3 跳台阶题目链接题目描述解题思路代码10.3 跳台阶题目链接NowCoder题目描述一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。解题思路当 n = 1 时,只有一种跳法:当 n = 2 时,有两种跳法:跳 n 阶台阶,可以先跳 1 阶台阶,再跳 n-1 阶台阶;或者先跳 2 阶台阶,再跳 n-2 阶台...原创 2020-03-01 14:52:31 · 191 阅读 · 0 评论 -
10.2 矩形覆盖(剑指 Offer 题解Java版)
文章目录10.2 矩形覆盖题目描述题目链接关于分治法在这里插入图片描述代码实现10.2 矩形覆盖题目描述我们可以用 21 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 21 的小矩形无重叠地覆盖一个 2*n 的大矩形,总共有多少种方法?题目链接NowCoder关于分治法 分治法,分而治之。就是...原创 2020-02-28 21:29:36 · 255 阅读 · 0 评论 -
10.1 斐波那契数列(剑指 Offer 题解Java版)
文章目录10.1 斐波那契数列题目链接题目描述解题思路10.1 斐波那契数列题目链接NowCoder题目描述求斐波那契数列的第 n 项,n <= 39。解题思路如果使用递归求解,会重复计算一些子问题。例如,计算 f(4) 需要计算 f(3) 和 f(2),计算 f(3) 需要计算 f(2) 和 f(1),可以看到 f(2) 被重复计算了。递归是将一个问题划分成多个子问题求...原创 2020-02-26 21:34:03 · 225 阅读 · 0 评论 -
9. 用两个栈实现队列(剑指 Offer 题解Java版)
文章目录9. 用两个栈实现队列题目链接题目描述解题思路分析Java实现栈Java实现队列用两个栈实现队列9. 用两个栈实现队列题目链接牛客网题目描述用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。解题思路in 栈用来处理入栈(push)操作,out 栈用来处理出栈(pop)操作。一个元素进入 in 栈之后,出栈的顺序被反转。当元素要出栈时,需要先进入 out 栈...原创 2020-02-24 12:29:32 · 247 阅读 · 0 评论 -
8. 二叉树的下一个结点(剑指 Offer 题解Java版)
文章目录8. 二叉树的下一个结点题目链接题目描述解题思路代码实现8. 二叉树的下一个结点题目链接牛客网题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回 。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。public class TreeLinkNode { int val; TreeLinkNode left = null;...原创 2020-02-25 18:04:11 · 248 阅读 · 0 评论 -
7. 重建二叉树(剑指 Offer 题解Java版)
文章目录7. 重建二叉树题目链接题目描述解题思路7. 重建二叉树题目链接牛客网题目描述根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。解题思路前序遍历序列的第一个元素 3 就是二叉树的根节点,中序遍历序列的根节点 3 把这个序列分成两半部分,分别是[9]和[20,15,7],左半分部是根节点的左子树,右半分布是根节点的右,...原创 2020-02-23 12:06:44 · 201 阅读 · 0 评论 -
6. 从尾到头打印链表(剑指 Offer 题解Java版)
文章目录6. 从尾到头打印链表题目链接题目描述1. 使用递归2. 使用头插法3. 使用栈6. 从尾到头打印链表题目链接牛客网题目描述从尾到头反过来打印出每个结点的值。解题思路1. 使用递归要逆序打印链表 1->2->3(3,2,1),可以先逆序打印链表 2->3(3,2),最后再打印第一个节点 1。而链表 2->3 可以看成一个新的链表,要逆序打印该链表可...原创 2020-02-20 23:51:45 · 172 阅读 · 0 评论 -
5. 替换空格(剑指 Offer 题解Java版)
文章目录5. 替换空格题目链接题目描述解题思路String、StringBuffer与StringBuilder之间区别5. 替换空格题目链接牛客网题目描述将一个字符串中的空格替换成 “%20”。Input:"A B"Output:"A%20B"解题思路① 在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。因为一个空格要替换成三个字符(%20),所以当遍历到一...原创 2020-02-19 13:43:16 · 346 阅读 · 0 评论 -
4. 二维数组中的查找(剑指 Offer 题解Java版)
文章目录4. 二维数组中的查找题目链接题目描述解题思路4. 二维数组中的查找题目链接牛客网题目描述给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。Consider the following matrix:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6,...原创 2020-02-18 12:21:16 · 349 阅读 · 0 评论 -
3. 数组中重复的数字(剑指 Offer 题解Java版)
文章目录3. 数组中重复的数字题目链接题目描述解题思路3. 数组中重复的数字题目链接牛客网题目描述在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。Input:{2, 3, 1, 0, 2, 5}Output:2解题思路要求时间复杂度 O(N),...原创 2020-02-17 16:16:03 · 179 阅读 · 13 评论