剑指offer Java解集
分享个人解题思路
goldfish_well
这个作者很懒,什么都没留下…
展开
-
剑指offer Java题解之JZ59 滑动窗口的最大值
题目:给定一个长度为 n 的数组 num 和滑动窗口的大小 size ,找出所有滑动窗口里数值的最大值。示例:输入:[2,3,4,2,6,2,5,1],3返回值:[4,4,6,6,6,5]思路:这道题之前写过,复杂度:时间复杂度:遍历O(n)空间复杂度:栈O(n)代码:...原创 2022-01-31 22:52:31 · 733 阅读 · 0 评论 -
剑指offer Java题解之JZ73 翻转单词序列
题目:例如,“nowcoder. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a nowcoder.”。示例:输入:"nowcoder. a am I"返回值:"I am a nowcoder."思路:思路是很清晰的,先碰到的单词放到末尾,以空格为界限重要的是怎么实现,借助栈,先碰到的单词先入栈,再依次出栈具体实现见代码但其实不用栈也可以,就是使用栈的思想,用倒序遍历去实现就可以了原创 2022-01-31 17:49:32 · 532 阅读 · 0 评论 -
剑指offer Java题解之JZ31 栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。示例:输入:[1,2,3,4,5],[4,5,3,2,1]返回值:true说明:可以通过push(1)=>push(2)=>push(3)=>push(4)=>p.原创 2022-01-31 13:37:54 · 529 阅读 · 0 评论 -
剑指offer Java题解之JZ30 包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。此栈包含的方法有:push(value):将value压入栈中pop():弹出栈顶元素top():获取栈顶元素min():获取栈中最小元素示例:输入:["PSH-1","PSH2","MIN","TOP","POP","PSH1","TOP","MIN"]输出:-1,2,1,-1...原创 2022-01-31 12:44:24 · 700 阅读 · 0 评论 -
剑指offer Java题解之JZ37 序列化二叉树
题目:用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。示例:输入:["PSH1","PSH2","POP","POP"]返回值:1,2说明:"PSH1":代表将1插入队列尾部"PSH2":代表将2插入队列尾部"POP“:代表删除一个元素,先进先出=>返回1"POP“:代表删除一个元素,先进先出=>.原创 2022-01-31 09:58:54 · 654 阅读 · 0 评论 -
剑指offer Java题解之JZ86 在二叉树中找到两个节点的最近公共祖先
题目:给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1和o2,请找到 o1和o2的最近公共祖先节点。数据范围:1 \le n \le 10001≤n≤1000,树上每个节点的val满足0<val \le 1000<val≤100要求:时间复杂度O(n)O(n)注:本题保证二叉树中每个节点的val值均不相同。如当输入[3,5,1,6,2,0,8,#,#,7,4],5,1时,二叉树{3,5,1,6,2,0,8,#,#,7,4}如下图...原创 2022-01-30 14:58:39 · 427 阅读 · 0 评论 -
剑指offer Java题解之JZ34 二叉树中和为某一值的路径(二)
题目:给定一个二叉树root和一个整数值 sum ,求该树有多少路径的的节点值之和等于 sum 。1.该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点2.总节点数目为n3.保证最后返回的路径个数在整形范围内(即路径个数小于231-1)示例:二叉树root为{1,2,3,4,5,4,3,#,#,-1},sum=6,那么总共如下所示,有3条路径符合要求思路:比第一题的路径和少点条件,很好写。复杂度:时原创 2022-01-30 13:41:39 · 170 阅读 · 0 评论 -
剑指offer Java题解之JZ37 序列化二叉树
题目:请实现两个函数,分别用来序列化和反序列化二叉树,不对序列化之后的字符串进行约束,但要求能够根据序列化之后的字符串重新构造出一棵与原二叉树相同的树。二叉树的序列化(Serialize)是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树等遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#)二叉树的反序列化(Deserialize)是指:根据某种遍历顺序得到的.原创 2022-01-30 13:19:39 · 595 阅读 · 0 评论 -
剑指offer Java题解之JZ78 把二叉树打印成多行
题目:给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树多行打印层序遍历的结果是[[1],[2,3],[4,5]]示例:输入:{1,2,3,#,#,4,5}返回值:[[1],[2,3],[4,5]]思路:简单的层序,没啥可说的复杂度:时间复杂度:遍历O(n).原创 2022-01-30 11:04:16 · 88 阅读 · 0 评论 -
剑指offer Java题解之JZ28 对称的二叉树
题目:给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)例如: 下面这棵二叉树是对称的下面这棵二叉树不对称。数据范围:节点数满足 0 \le n \le 10000≤n≤1000,节点上的值满足 |val| \le 1000∣val∣≤1000要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)示例:输入:{1,2,2,3,4,4,3}返回值:true思路:...原创 2022-01-30 10:41:48 · 206 阅读 · 0 评论 -
剑指offer Java题解之JZ8 二叉树的下一个结点
题目:给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示示例:输入:{8,6,10,5,7,9,11},8返回:9思路:next是指向父结点的那我们这题最关键的就是分类讨论1.空树2.结点有右孩子,找到右孩子的最左子结点3.结点没有右子树...原创 2022-01-30 10:27:50 · 201 阅读 · 0 评论 -
剑指offer Java题解之JZ34 二叉树中和为某一值的路径(二)
题目:输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值的和为expectNumber的所有路径。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n如二叉树root为{10,5,12,4,7},expectNumber为22则合法路径有[[10,5,7],[10,12]]数据范围:树中节点总数在范围[0, 50..原创 2022-01-29 21:01:36 · 96 阅读 · 0 评论 -
剑指offer Java题解之JZ82 二叉树中和为某一值的路径(一)
题目:给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n例如:给出如下的二叉树,sum=22,数据范围:1.树上的节点数满足0 \le n \le 100000≤n≤100002.每 个节点的值都满足|val| \le 1000∣va...原创 2022-01-29 18:19:21 · 95 阅读 · 0 评论 -
剑指offer Java题解之JZ33 二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。数据范围: 节点数量0 \le n \le 10000≤n≤1000,节点上的值满足1 \le val \le 10^{5}1≤val≤105,保证节点上的值各不相同要求:空间复杂度O(n)O(n),时间时间复杂度O(n^2)O(n2)提示:1.二叉搜索树是指父亲节点大于左子树中的全部节点,但是小于右子树中的全部节...原创 2022-01-28 12:39:11 · 516 阅读 · 0 评论 -
剑指offer Java题解之JZ32 从上往下打印二叉树
题目:不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。示例:输入:{8,6,10,#,#,2,1}返回值:[8,6,10,2,1]思路:简单题层序遍历挨个添加就行了复杂度:时间复杂度:遍历O(n)空间复杂度:Arraylist O(n)代码: .原创 2022-01-28 12:05:56 · 388 阅读 · 0 评论 -
剑指offer Java题解之JZ27 二叉树的镜像
题目:操作给定的二叉树,将其变换为源二叉树的镜像。数据范围:二叉树的节点数 0 \le n \le 10000≤n≤1000 , 二叉树每个节点的值 0\le val \le 10000≤val≤1000要求: 空间复杂度 O(n)O(n) 。本题也有原地操作,即空间复杂度 O(1)O(1) 的解法,时间复杂度 O(n)O(n)比如:源二叉树镜像二叉树示例:输入:{8,6,10,5,7,9,11}返回值:{8,10,6,11,9,7,5}思原创 2022-01-28 11:47:25 · 245 阅读 · 0 评论 -
剑指offer Java题解之JZ26 树的子结构
题目:输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构示例:输入:{8,8,7,9,2,#,#,#,#,4,7},{8,9,2}返回值:true思路:很显然这是一个遍历可能性的问题,因此最容易想到的还是暴力回溯关键点在于怎么实现复杂度:时间复杂度:遍历O(n)空间复杂度:递归最差.原创 2022-01-28 11:28:31 · 321 阅读 · 0 评论 -
剑指offer Java题解之剑指 Offer 07. 重建二叉树(击败了99.77%的用户)
题目:输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]思路:前序遍历:根 左 右中序遍历:左 根 右后序遍历:左 右 根根据遍历根的顺序去确定哪种排序,现在我们有中序和前序的结果。pre原创 2022-01-28 10:47:58 · 446 阅读 · 0 评论