![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
牛客网-剑指offer题解
羊咩咩a284811
一个积极向上的码农。
展开
-
牛客网剑指offer第二十六题解答及知识点
问题:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解答1:知识点:1.二叉搜索树。2.双向链表。public class Solution {//定义双向链表的左右头节点 TreeNode HeadLeft = null; TreeNode HeadRight = null; public TreeNode Convert(TreeNode pRootOfTree) { if(pRoot原创 2021-03-09 21:27:41 · 77 阅读 · 0 评论 -
牛客网剑指offer第二十五题解答及知识点
问题:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)解答1:了解什么是复杂链表。public class Solution { public RandomListNode Clone(RandomListNode pHead) { if (pHead==null){ r原创 2021-03-08 21:46:43 · 62 阅读 · 0 评论 -
牛客网剑指offer第二十四题解答及知识点
问题:输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。解答1:知识点:链表的操作。...原创 2021-02-25 12:25:56 · 69 阅读 · 0 评论 -
牛客网剑指offer第二十三题解答及知识点
问题:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。解答1:知识点:1.二叉搜索树二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树。或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树作为一种经典的数据结原创 2021-02-24 12:03:01 · 89 阅读 · 0 评论 -
java构造方法的理解
在java类中,没有定义构造方法时,系统会默认的添加一个无参构造方法。当在类中自定义一个构造方法时,默认的构造方法会被覆盖,如果需要默认的构造方法,则需要手动添加默认的无参构造方法。构造方法的特点1.构造方法的方法名称与类名同名。构造函数的名称必须与类名相同。在java中,普通函数可以与构造函数同名,但是必须带返回值。2.构造方法不用定义返回值类型。构造函数没有返回值,也不能用void来修饰。3.构造方法不用return语句。4.构造方法可以被重载。5.构造方法不能直接调用,必须通过new关原创 2021-02-23 12:00:36 · 352 阅读 · 1 评论 -
牛客网剑指offer第二十二题解答及知识点
问题:从上往下打印出二叉树的每个节点,同层节点从左至右打印。解答1:知识点:1.队列的基本使用。2.链表的基本使用。3.广度优先遍历。4.层次遍历。原创 2021-02-23 11:07:38 · 66 阅读 · 0 评论 -
牛客网剑指offer第二十一题解答及知识点
问题:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解答1:知识点:栈的基本操作。相当于遍历popA,当栈底的值等于该元素时,我们执行pop操作,如果popA为该栈的弹出顺序,则最后栈就弹出所有数据,则为空。返回true。解答2:知识点:链原创 2021-02-22 17:27:31 · 68 阅读 · 0 评论 -
牛客网剑指offer第二十题解答及知识点
问题:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。解答1:知识点:栈的基本操作。import java.util.Stack;public class Solution { Stack<Integer> stack = new Stack<>(); Stack<Integer> minstack = new Stack<>(); public void push(i原创 2021-02-21 22:30:01 · 72 阅读 · 0 评论 -
牛客网剑指offer第十九题解答及知识点
问题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解答1:知识点:数组的简单操作.采用逼近的方法,遍历后一行后就不再遍历该行。因此,需要设置边界范围。import java.util.ArrayList;public class Solution { public原创 2021-02-20 22:24:36 · 110 阅读 · 0 评论 -
牛客网剑指offer第十八题解答及知识点
问题:操作给定的二叉树,将其变换为源二叉树的镜像。解答1:知识点:1.二叉树的结构。2.递归。解答2:知识点:二叉树的结构。深度优先遍历。原创 2021-02-19 22:48:16 · 82 阅读 · 0 评论 -
牛客网剑指offer第十七题解答及知识点
问题:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)。解答1:知识点:1.二叉树的简介。 二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。 二叉树(bi原创 2021-02-18 16:38:13 · 88 阅读 · 0 评论 -
牛客网剑指offer第十六题解答及知识点
问题:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解答1:知识点:ListNode链表的基本操作,遍历方法。解答2:知识点:递归方法。...原创 2021-02-17 22:05:10 · 83 阅读 · 0 评论 -
牛客网剑指offer第十五题解答及知识点
问题:输入一个链表,反转链表后,输出新链表的表头解答1:知识点:1.单链表的遍历。2.单链表的节点和指针。原创 2020-12-27 22:21:43 · 83 阅读 · 0 评论 -
牛客网剑指offer第十四题解答及知识点
问题:输入一个链表,输出该链表中倒数第k个结点。解答一:把倒数第k个节点转换成正数第count-k个节点(count为链表的总长度)知识点:1.知道链表的简单操作。2.知道如何遍历链表。解答二:定义两个指针。如图所示,当listfast.next=null时,说明指针已经到达了最后。我们设置两个指针之间相差k-1步,当listfast.next=null时,listslow指针刚好到达倒数第k个节点。此时就可以得到链表倒数第k个节点即为listslow。知识点:1.知道链表的简单操作。原创 2020-12-27 20:33:13 · 86 阅读 · 0 评论 -
牛客网剑指offer第七天知识点
问题:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n≤39解答1:使用递归知识点:1.知道斐波那契。F(n) = F(n-1) +F(n-2)2.知道如何使用递归。解答2:不使用递归。...原创 2020-12-26 22:49:53 · 91 阅读 · 0 评论 -
牛客网剑指offer第十三题解答及知识点
问题:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解答1:知识点:1.如何创建新的数组。2.System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)知识拓展:Arrays.copyOf(int[] original, int newLength)System.arr原创 2020-12-26 22:36:00 · 69 阅读 · 0 评论 -
牛客网剑指offer第十一题
问题:输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。解答1:使用函数。解答2:不使用函数知识点:java中>>与>>>的区别在java中,>>,带符号位的右移,若为正数,则高位补0;若为负数,则高位补1.在java中,>>>,不带符号位的右移,逻辑右移,不论正负数,高位补零。...原创 2020-12-20 14:18:47 · 88 阅读 · 0 评论 -
牛客网剑指offer十二题知识拓展
问题:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0解答1:使用函数Math.pow(i,j);求i的j次方。此时,就不需要判断j是否为正负数。解答2:不使用函数。不使用函数时,就需要判断正负数的情况。...原创 2020-12-20 11:47:02 · 61 阅读 · 1 评论 -
牛客网剑指offer第十题知识拓展
问题:我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:解答1:拿到这种题,需要找规律。n=1:n=2...原创 2020-12-18 23:38:05 · 69 阅读 · 0 评论 -
牛客网剑指offer第九题知识拓展
问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解答1:拿到题目,和不变态的青蛙不一样,这只青蛙比较变态。一次可以跳很多阶台阶。我们首先找关系:一阶台阶:(1)两阶台阶:(1+1),(2)三阶台阶:(1+1+1),(2+1),(1+2),(3)四阶台阶:(1+1+1+1),(2+1+1),(1+2+1),(3+1),(1+1+2),(2+2),(1+3),(4)可以看出,与每一阶都有关系。F(n)=F(n-1)+F(n-2)+原创 2020-12-17 22:46:34 · 114 阅读 · 0 评论 -
牛客网第八题知识扩展
问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解答1:使用递归(复杂度较高)首先,这种题一般是需要找规律。当青蛙跳一个1级台阶时:只有一种跳法。当青蛙跳一个2级台阶时:有两种跳法。(1+1)或(2)当青蛙跳一个3级台阶时:(1+1+1)(1+2)(2+1)当青蛙跳一个4级台阶时:(1+1+1+1)(1+2+1)(2+1+1)(2+2)(1+1+2)因为青蛙每次只能跳1或2阶台阶,所以第四次台阶就是第三次加1和第二次加原创 2020-12-16 15:45:29 · 120 阅读 · 0 评论 -
牛客网第六题知识扩展
问题:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。问题解答1:笨方法。问题解答2:充分利用题干信息。...原创 2020-12-16 14:41:50 · 165 阅读 · 0 评论 -
牛客网剑指offer第五题解答即知识扩展
问题:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解答:知识点:1.队列的push与pop队列为FIFO,先进先出。执行push时,在队尾插入一个数据;执行pop时,删除队头的数据。2.栈的push与pop栈为LIFO,先进后出。执行push时,插入栈顶元素;执行pop时,删除栈顶元素。peek返回栈顶元素,但不删除。在该问题中,队列的push操作相当于栈的push操作。因为队列是先进先出,所以可以将栈1中的元素弹出来,再插入栈2中,这样栈2弹出时的值原创 2020-12-13 19:25:54 · 56 阅读 · 0 评论 -
牛客网剑指offer第四题解答即知识扩展
问题:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解答:知识点:1:什么是二叉树2:二叉树的前中后序列怎么表示...原创 2020-12-13 15:52:48 · 87 阅读 · 0 评论 -
牛客网第三题知识扩展
问题:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。解答1:看到题目时,我首先想到的是反转链表。解答2:使用链表的add方法。知识点:List的add方法有两种:(1)add(Element e),即直接插入数据,依次往后添加。(2)add(Index i,Element e),即在规定的索引处插入数据,插入数据时,后面的数据会依次向右移动。...原创 2020-12-04 20:26:11 · 64 阅读 · 0 评论 -
牛客网剑指offer第二题解答即知识扩展
题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解答1:重新定义一个字符串,然后遍历输入的字符串,如果部位空则存入当前索引的值,如果为空,则替换成%20。刚开始犯了一个小错误,在a.append("%20")中;刚开始a.append(’%20’),一直没找到错误。知识点:java中双引号与单引号的区别。单引号里面的数据是char类型。双引号里面的数据是String类型。cha原创 2020-12-02 20:49:09 · 159 阅读 · 0 评论 -
牛客网剑指offer第一题及涉及的知识点和扩展的知识点
问题:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数target,判断数组中是否含有该整数。解答1:看到题目的第一个感觉就是使用笨方法,即遍历数组,再把数组的每一个元素与target比较。需要掌握的知识点:1.求数组长度:length函数。2.求二位数组array[i][j]的行数和列数行数:直接加上length,arrray.length;列数:加上指定索引,arrray[0原创 2020-12-01 20:31:27 · 114 阅读 · 1 评论