剑指
文章平均质量分 52
自律信仰
这个作者很懒,什么都没留下…
展开
-
leetCode刷题记录4-面试经典150题-2
主要就是度为0的不必非要用栈,用队列也行,队列直接作为拓扑排序的终止条件即可。没有前置关系时不需要要特判,全是度为0的节点,也可以照常执行。不要用statck,继承了Vector, 有很多锁,效率很低。修改后4ms,差不多了吧。原创 2024-05-10 14:45:15 · 427 阅读 · 0 评论 -
剑指offer 81题-Python版本(前37DP之前)-Java版本(后43DP开始)
树2有的树1都有 直到树2遍历完 返回True 【可以树1有,树2没有,仍返回True,也就是树1跟着树2遍历即可 例如层序跟着树2,可以少入队一些结点】前面2种方式都过于依赖先序遍历 (导致有了递归,看起来好难 其实简单理解为先序遍历,也还好)难点: 两个子树的判断(是否有子关系),需要单独拎出来。下面这种方式完全用层序遍历 理解起来就简单多了。原创 2023-01-20 15:28:34 · 616 阅读 · 0 评论 -
JZ76 删除链表中重复的结点
【代码】JZ76 删除链表中重复的结点。原创 2023-01-19 21:45:25 · 77 阅读 · 0 评论 -
JZ35 复杂链表的复制
【代码】JZ35 复杂链表的复制。原创 2023-01-18 10:18:36 · 71 阅读 · 0 评论 -
JZ52 两个链表的第一个公共结点
【代码】JZ52 两个链表的第一个公共结点。原创 2022-11-15 22:49:36 · 119 阅读 · 0 评论 -
JZ25 合并两个排序的链表
【代码】JZ25 合并两个排序的链表。原创 2022-11-15 22:17:43 · 114 阅读 · 0 评论 -
JZ24 反转链表
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。如当输入链表{1,2,3}时,原创 2022-11-15 21:25:33 · 145 阅读 · 0 评论 -
JZ22 链表中倒数最后k个结点
【代码】JZ22 链表中倒数最后k个结点。原创 2022-12-08 15:15:33 · 66 阅读 · 0 评论 -
JZ23 链表中环的入口结点
【代码】JZ23 链表中环的入口结点。原创 2022-12-08 14:51:09 · 196 阅读 · 0 评论 -
JZ79 判断是不是平衡二叉树
描述输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。样例解释:样例二叉树如图,为一颗平衡二叉树注:我们约定空树是平衡二叉树。数据范围: n≤100,树上节点的val值满足 0≤n≤1000要求:空间复杂度O(1) ,时间复杂度 O(n)原创 2022-05-14 21:30:31 · 63 阅读 · 0 评论 -
JZ36 二叉搜索树与双向链表
描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示数据范围:输入二叉树的节点数 0≤n≤1000,二叉树中每个节点的值 0≤val≤1000要求:空间复杂度O(1) (即在原树上操作),时间复杂度O(n)注意:1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继2.返回链表中的第一个节点的指针3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据...原创 2022-05-14 14:33:00 · 98 阅读 · 0 评论 -
JZ34 二叉树中和为某一值的路径(二)
描述输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值的和为expectNumber的所有路径。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n如二叉树root为{10,5,12,4,7},expectNumber为22则合法路径有[[10,5,7],[10,12]]数据范围:树中节点总数在范围[0, 5000.原创 2022-05-14 10:29:14 · 261 阅读 · 2 评论 -
JZ82 二叉树中和为某一值的路径(一)
给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n例如:给出如下的二叉树, sum=22返回true,因为存在一条路径5\to 4\to 11\to 25→4→11→2的节点值之和为 22数据范围:1.树上的节点数满足 0≤n≤10000...原创 2022-05-09 10:54:27 · 267 阅读 · 0 评论 -
JZ33 二叉搜索树的后序遍历序列 (未完结合JZ31)
描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。数据范围: 节点数量 0≤n≤1000,节点上的值满足 1≤val≤10^5,保证节点上的值各不相同要求:空间复杂度 O(n),时间时间复杂度O(n^2)提示:1.二叉搜索树是指父亲节点大于左子树中的全部节点,但是小于右子树中的全部节点的树。2.该题我们约定空树不是二叉搜索树3.后序遍历是指按照 “左子树-右子...原创 2022-05-08 23:27:01 · 142 阅读 · 0 评论 -
JZ32 从上往下打印二叉树
描述不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。数据范围:0<=节点总数<=1000-1000<=节点值<=1000示例1输入:{8,6,10,#,#,2,1}返回值:[8,6,10,2,1]示例2输入:{5,4,#,3,#,2,#,1}返回值:原创 2022-05-07 21:59:25 · 81 阅读 · 0 评论 -
JZ27 二叉树的镜像
描述操作给定的二叉树,将其变换为源二叉树的镜像。数据范围:二叉树的节点数 0≤n≤1000, 二叉树每个节点的值 0≤val≤1000要求:空间复杂度O(n) 。本题也有原地操作,即空间复杂度O(1) 的解法,时间复杂度O(n)比如:源二叉树镜像二叉树示例1输入:{8,6,10,5,7,9,11}返回值:{8,10,6,11,9,7,5}说明:如题面所示 示例2输入:{}返回值:{}...原创 2022-05-06 14:25:39 · 605 阅读 · 0 评论 -
JZ26 树的子结构
描述输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构数据范围:0 <= A的节点个数 <= 100000 <= B的节点个数 <= 10000示例1输入:{8,8,7,9,2,#,#,#,#,4,7},{8,9,2}返回值:true示例2输入:{1,2,3,4,5原创 2022-05-06 00:33:26 · 924 阅读 · 0 评论 -
JZ7 重建二叉树
描述给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。提示:1.vin.length ==pre.length2.pre 和 vin均无重复元素3.vin出现的元素均出现在pre里4.只需要返回根结点,系统会自动输出整颗树做答案对比数据范围: n≤2000,节点的值 −10000≤val≤10000...原创 2022-05-05 23:19:55 · 769 阅读 · 0 评论 -
JZ54 二叉搜索树的第k个节点
描述给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。1.返回第k小的节点值即可2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-13.保证n个节点的值不一样数据范围: 0≤n≤1000, 0≤k≤1000,树上每个结点的值满足 0≤val≤1000进阶:空间复杂度O(n) ,时间复杂度O(n)如输入{5,3,7,2,4,6,8},3时,二叉树{5,3,7,2,4,6,8}如下图所示:该二叉树所有节...原创 2022-05-04 09:12:48 · 1017 阅读 · 0 评论 -
JZ18 删除链表的节点
描述给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。1.此题对比原题有改动2.题目保证链表中节点的值互不相同3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点数据范围:0<=链表节点值<=100000<=链表长度<=10000示例1输入:{2,5,1,9},5复制返回值:{2,1,9}复制说明:给定原创 2022-04-27 11:23:04 · 176 阅读 · 0 评论 -
JZ76 删除链表中重复的结点
我的做法,Hash (没注意到一定是个升序链表 此法因而适合乱序链表了) public ListNode deleteDuplication(ListNode pHead) { int[] Hash= new int[1010];//也默认是0 不错 ListNode ans=new ListNode(-1); ans.next=pHead;//加个头结点 while (pHead!=null...原创 2022-04-27 11:14:02 · 693 阅读 · 0 评论 -
JZ35 复杂链表的复制
描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。下图是一个含有5个结点的复杂链表。图中实线箭头表示next指针,虚线箭头表示random指针。为简单起见,指向null的指针没有画出。示例:输入:{1,2,3,4,5,3,5,#,2,#}输出:{1,2,3,4,5,3,5,#,2,#}解析:.原创 2022-04-27 10:42:55 · 129 阅读 · 0 评论 -
JZ22 链表中倒数最后k个结点
描述输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。例如输入{1,2,3,4,5},2时,对应的链表结构如下图所示:其中蓝色部分为该链表的最后2个结点,所以返回倒数第2个结点(也即结点值为4的结点)即可,系统会打印后面所有的节点来比较。示例1输入:{1,2,3,4,5},2复制返回值:{4,5}复制说明:返回倒数第2个节点4,系统会打印后面所有的节点来比较。原创 2022-04-27 09:10:22 · 70 阅读 · 0 评论 -
JZ23 链表中环的入口结点
描述给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。数据范围:n≤10000,1<=结点值<=10000要求:空间复杂度O(1) ,时间复杂度O(n)例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台会根据第二段是否为空将这两段组装成一个无环或者有环单链表返回值...原创 2022-04-26 18:53:41 · 86 阅读 · 0 评论 -
JZ52 两个链表的第一个公共结点
描述输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)数据范围: n≤1000要求:空间复杂度O(1) ,时间复杂度O(n)例如,输入{1,2,3},{4,5},{6,7}时,两个无环的单向链表的结构如下图所示:可以看到它们的第一个公共结点的结点值为6,所以返回结点值为6的结点。输入描述:输入分为是3段,第一段是第一个链表的非公共部分,第二段是第二个...原创 2022-04-26 17:57:08 · 91 阅读 · 0 评论 -
JZ25 合并两个排序的链表
描述输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。数据范围:0 \le n \le 10000≤n≤1000,-1000 \le 节点值 \le 1000−1000≤节点值≤1000要求:空间复杂度O(1)O(1),时间复杂度O(n)O(n)如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6},转换过程如下图所示:或输入{-1,2,4},{1,3,4}时,合...原创 2022-04-26 13:14:00 · 86 阅读 · 0 评论 -
JZ24 反转链表
描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围:0\leq n\leq10000≤n≤1000要求:空间复杂度O(1)O(1),时间复杂度O(n)O(n)。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。以上转换过程如下图所示:示例1输入:{1,2,3}复制返回值:{3,2,1}复制示例2...原创 2022-04-24 00:41:36 · 518 阅读 · 0 评论 -
JZ6 从尾到头打印链表
描述输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表如下图:返回一个数组为[3,2,1]0 <= 链表长度 <= 10000示例1输入:{1,2,3}复制返回值:[3,2,1]复制示例2输入:{67,0,24,58}复制返回值:[58,24,0,67]1、头节点是第一个结点。 头结点才是缓冲节点2、注意此API的使用:public void add(int ind原创 2022-04-24 00:17:53 · 114 阅读 · 0 评论