
牛客剑指offer
少喝烫水
嘘!
展开
-
对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/dui-ch原创 2020-09-07 18:42:25 · 95 阅读 · 0 评论 -
二叉树的下一个节点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:首先需要分两种情况:此节点存在右子树,那么它的下一个节点就为右子树中的最左节点此节点不存在右子树,可能是最右节点,也可能是最左节点如果它为最左节点,那么下一个节点就是node->next,即它的父节点如果它为最右节点,那么下一个节点就是父节点的父节点的父节点,或者不存在/*public class TreeLinkNode {原创 2020-09-07 18:22:15 · 205 阅读 · 0 评论 -
剑指offer 剪绳子
贪心,记忆化搜索大概(?题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)输出描述:输出答案。示例1输入8输出18import java.lang.Mat原创 2020-06-07 18:34:10 · 105 阅读 · 0 评论 -
二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Solution { public boolean Find(int target, int [][] array) { int i , j; if(array == null || array.lengt原创 2020-05-21 22:24:33 · 101 阅读 · 0 评论 -
二叉树中和为某一值的路径
题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)就是dfs,此处需要温习一下递归调用中全局变量或者函数参数的使用:全局变量的形式,递归结束后必须对该变量修改,恢复原值;函数参数的形式,因为递归调用函数时,实际上,从内存分布上看,...原创 2020-04-08 20:41:47 · 101 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路二叉搜索树根节点的值大于其左子树中任意一个节点的值,小于其右节点中任意一节点的值,这一规则适用于二叉查找树中的每一个节点。后序遍历先遍历左子树,再遍历右子树,最后访问根节点,在遍历左,右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根...原创 2020-04-06 21:30:56 · 175 阅读 · 0 评论 -
栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路将pushA数组压入栈中,每压入一个就用栈顶和popA比较,如果相等,就出栈,最...原创 2020-03-31 17:34:48 · 1695 阅读 · 0 评论 -
包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。用了两种方法,第一种是new一个栈存当前最小数,再new一个栈存储原数据import java.util.Stack;public class Solution { Sta...原创 2020-03-31 12:16:13 · 96 阅读 · 0 评论 -
顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.嗯……没什么好说的就是模拟orz但是要注意每列最后一个容易重复,所以要对边界值++import java.util...原创 2020-03-27 22:21:12 · 86 阅读 · 0 评论 -
二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5感觉...原创 2020-03-26 18:26:37 · 95 阅读 · 0 评论 -
树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)题解参考:https://blog.nowcoder.net/n/0a7ab5e0ea0749279462d9e413232a94?f=comment首先分清子树和子结构子树一棵大树A,一棵小树B,若B是A的子树,则:B和A的结点值完全相同,它们俩的左子树,右子树的值也完全相同或者B的...转载 2020-03-26 17:58:09 · 127 阅读 · 0 评论 -
二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:如果一个二进制整数不为 0 , 那它必定含有 1 ,如果这个数减 1 ,那么最右边 1 就会变成 0 ,原来在这个 1 后面的 0 都会变成 1 ,其余位不会受到影响例如 1101000 , 减 1 得 1100111, 再和原来的数做与运算,得 1100000按同样的方法计算一次,得 1000000所以二进...原创 2020-03-21 22:22:44 · 94 阅读 · 0 评论 -
合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。一开始还在想把一个链表插入到另一个链表中,后来发现实现很麻烦,再一想发现这不就是归并排序嘛,直接新建一个链表完事儿(还有边界条件里容易空指针,调试了一下才发现(/*public class ListNode { int val; ListNode next = null;...原创 2020-03-18 23:05:04 · 101 阅读 · 0 评论 -
反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。思路:假设一个链表 A -> B ->C,则反转后为 C -> B -> Anew两个新节点,一个pre为反转链表的表头,另一个tmp遍历当前链表用每当tmp指向新的节点时,执行以下操作:将tmp指向的下一节点备份改tmp指向prepre = tmptmp = 备份的下一节点/*public cl...原创 2020-03-18 12:49:42 · 99 阅读 · 0 评论 -
链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode Find...原创 2020-03-18 16:34:21 · 106 阅读 · 0 评论 -
重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析:前序遍历:根 - 左 - 右中序遍历:左 - 根 - 右确定二叉树的过程为:根据前序遍历的一个节点确定根节点根据根节点将中序遍历序列分...转载 2020-03-07 00:42:47 · 72 阅读 · 0 评论 -
用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。就……字面意思,进栈的时候用一个栈来存数据,另一个栈通过中间变量将数据倒着存一遍出栈的时候将倒着存的那个栈栈顶pop,然后流程和进栈差不多(……)需要注意的是每次倒腾都要把被存放的栈清空啊,因为没注意这个wa了两次(。)import java.util.Stack;public class S...原创 2020-02-22 22:39:29 · 142 阅读 · 0 评论 -
从尾到头打印链表
题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。嗯……就常规思路,后来看题解还有一种递归的方法,顺便放一下:非递归:/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* t...原创 2020-02-21 21:12:27 · 91 阅读 · 0 评论 -
变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。就……随便写几个样例就能看出规律,第n级台阶的跳法为public class Solution { public int JumpFloorII(int target) { int t = 1; ...原创 2020-01-18 19:30:16 · 88 阅读 · 0 评论 -
斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39public class Solution { public int Fibonacci(int n) { int[] a = new int[50]; a[0] = 0; ...原创 2020-01-18 12:00:49 · 192 阅读 · 0 评论 -
替换空格
java怎么这么麻烦(题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。public class Solution { public String replaceSpace(StringBuffer str) { int i; ...原创 2020-01-18 11:53:55 · 99 阅读 · 0 评论