![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
lilong117194
“The world is not made of strings , but is made of things.”
展开
-
java 二叉树的深度、平衡二叉树、二叉树的下一个结点
1. 二叉树的深度1. 题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。2. 求解思路可以用后序遍历,从最后一层往上累加层数,最后加上根节点。3. 代码class TreeNode { int val = 0; TreeNode left = null; TreeNode right...原创 2019-11-14 00:15:22 · 572 阅读 · 0 评论 -
java 对称的二叉树
1. 对称的二叉树1. 题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。2. 解题思路可以按照类似层次遍历,来判断是否是堆成二叉树:首先根节点以及其左右子树,左子树的左子树和右子树的右子树相同,以及左子树的右子树和右子树的左子树相同即可,然后采用递归一直判断下去。3. 代码public class isSymmet...原创 2019-11-14 00:14:26 · 712 阅读 · 0 评论 -
java 反转链表、合并链表
1. 题目描述输入一个链表,反转链表后,输出新链表的表头。2. 解题思路定义三个指针:第一个指针指向当前正在处理的节点;第二个指针指向当前处理节点的下一个节点,该指针是为了保证正常的遍历完顺序链表的所有节点;第三个指针指向当前处理节点的上一个节点,这里主要是为了修改当前指针的指向,也就是指向反向;3. 代码class ListNode { int val; List...原创 2019-11-14 00:13:14 · 630 阅读 · 0 评论 -
java 调整数组顺序使奇数位于偶数前面
1. 题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。2.解题思路(1)第一个思路:类似冒泡算法,前偶后奇数就交换,这里要注意考虑尽可能多的情况:public class Reorderarray { public static void main(Stri...原创 2019-02-17 15:02:36 · 799 阅读 · 1 评论 -
java 链表中倒数第k个结点
1. 题目描述输入一个链表,输出该链表中倒数第k个结点。2. 解体思路方法一:简单来说就是先遍历整个链表的长度L,然后根据k,从头节点开始遍历,到L-k,得到相应的节点。方法二:两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指针走(k-1)步,到达第k个节点。然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了。3. 代码实现方...原创 2019-02-17 15:01:54 · 1153 阅读 · 0 评论 -
Java 数值的二进制中1的个数和整数次方
1. 数值的二进制中1的个数1.1 题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。1.2 解题思路思路一:直接使用java自带的函数Integer.toBinaryString().toCharArray();把整数转换成二进制后再以字符串表示。思路二:如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0...原创 2018-11-11 15:19:53 · 368 阅读 · 0 评论 -
替换空格
1.题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。2.解题思路:3. 补充(1)Java中StringBuffer的用法:String作为不可修改的对象,即每次更改String都会产生一个新的字符串对象,与之相对应的StringBuffer类的对象能够进行多次修改并且...原创 2018-11-05 18:02:34 · 1239 阅读 · 0 评论 -
二维数组中的查找
感觉已经有点晚了,赶紧刷起来,不过我喜欢这种感觉。。下面主要是用于自己的学习记录,会有参考学习大牛的思路,毕竟我还是小白。。。。题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。首先这个题不难,有几个思路可以参考:思路1:可以暴力搜索,...原创 2018-11-05 10:38:10 · 5301 阅读 · 0 评论 -
Java 矩形覆盖
1. 题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?2. 解题思路当要覆盖2*1的大矩阵时:只有一种方式即f(1) = 1当要覆盖2*2的大矩阵时:可以有两种跳法:f(2) = 2当有3阶台阶时,这时我们先看第一步怎么走,分两种情况:当先跳1个台阶,那剩下就是2个台阶,这时剩下的2个台阶最多只有f(...原创 2018-11-10 23:20:40 · 516 阅读 · 0 评论 -
java 简单跳台阶和变态跳台阶
1. 简单跳台阶1.1 题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。1.2 解题思路对于本题,有题目描述可知,每次只能跳一个或者两个台阶,下面找一下规律:这里假设有n阶台阶时就有f(n)种跳法当有1阶台阶时只有一种跳法:f(1) = 1当有2阶台阶时就可以有两种跳法:f(2) = 2当有3阶台阶时,...原创 2018-11-10 11:40:13 · 1243 阅读 · 0 评论 -
Java 斐波那契数列
1. 题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=392. 解题思路这里要注意是从0开始的,而且第0项为0。3. 代码:public class FibonacciSequence { //{0,1,1,2,3,5,8,13,21,....} // 0 1 2 3 4 5 6 7 8 ..... pu...原创 2018-11-09 22:45:13 · 534 阅读 · 1 评论 -
旋转数组的最小数字
1.题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。2. 解题思路旋转之后的数组实际上可以划分成两个有序的子数组:前面子数组的大小都大于后面子数组中的元素...原创 2018-11-09 20:57:57 · 230 阅读 · 0 评论 -
用两个栈实现队列
1. 题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。2. 解题思路入队:将元素进栈A出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B。如果栈B不为空,栈B出栈。3. 代码public class TwoStackImplementationQueues { public static Stack<...原创 2018-11-09 18:50:44 · 271 阅读 · 0 评论 -
重建二叉树
1. 题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。2. 解题思路在二叉树的前序遍历中,第一个数字总是树的根节点。在中序遍历中,树的根节点在序列的中间某个位置,左子树的节点的值位于根节点的左边,右...原创 2018-11-09 13:05:19 · 621 阅读 · 0 评论 -
从尾到头打印链表
1.题目描述:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。2.解题思路:3. 补充原创 2018-11-06 20:18:12 · 246 阅读 · 0 评论