![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
浙江大学PAT B A组题目 每天都刷点 一直坚持到3战上岸
注意是上岸
自律信仰
这个作者很懒,什么都没留下…
展开
-
leetCode刷题记录4-面试经典150题-2
主要就是度为0的不必非要用栈,用队列也行,队列直接作为拓扑排序的终止条件即可。没有前置关系时不需要要特判,全是度为0的节点,也可以照常执行。不要用statck,继承了Vector, 有很多锁,效率很低。修改后4ms,差不多了吧。原创 2024-05-10 14:45:15 · 399 阅读 · 0 评论 -
leetCode刷题记录3-面试经典150题
DFS暴力枚举,过了198个,也不错了。408原题,4刷了,现在感觉很水了。注意k可能很大,需要对长度取一下模。没啥头绪,先暴力拿分,也是能力。强制加缓存,竟然超出内存限制。原创 2023-07-26 19:56:22 · 631 阅读 · 0 评论 -
面试题复盘
大厂面试题复盘原创 2023-06-14 22:26:21 · 106 阅读 · 0 评论 -
leetcodeTmp
DFS排列:每个元素可选0次,1次以及多次。原创 2023-04-12 15:55:02 · 358 阅读 · 0 评论 -
剑指offer 81题-Python版本(前37DP之前)-Java版本(后43DP开始)
树2有的树1都有 直到树2遍历完 返回True 【可以树1有,树2没有,仍返回True,也就是树1跟着树2遍历即可 例如层序跟着树2,可以少入队一些结点】前面2种方式都过于依赖先序遍历 (导致有了递归,看起来好难 其实简单理解为先序遍历,也还好)难点: 两个子树的判断(是否有子关系),需要单独拎出来。下面这种方式完全用层序遍历 理解起来就简单多了。原创 2023-01-20 15:28:34 · 592 阅读 · 0 评论 -
JZ76 删除链表中重复的结点
【代码】JZ76 删除链表中重复的结点。原创 2023-01-19 21:45:25 · 72 阅读 · 0 评论 -
JZ35 复杂链表的复制
【代码】JZ35 复杂链表的复制。原创 2023-01-18 10:18:36 · 66 阅读 · 0 评论 -
JZ52 两个链表的第一个公共结点
【代码】JZ52 两个链表的第一个公共结点。原创 2022-11-15 22:49:36 · 116 阅读 · 0 评论 -
JZ25 合并两个排序的链表
【代码】JZ25 合并两个排序的链表。原创 2022-11-15 22:17:43 · 110 阅读 · 0 评论 -
JZ24 反转链表
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。如当输入链表{1,2,3}时,原创 2022-11-15 21:25:33 · 142 阅读 · 0 评论 -
JZ22 链表中倒数最后k个结点
【代码】JZ22 链表中倒数最后k个结点。原创 2022-12-08 15:15:33 · 60 阅读 · 0 评论 -
JZ23 链表中环的入口结点
【代码】JZ23 链表中环的入口结点。原创 2022-12-08 14:51:09 · 190 阅读 · 0 评论 -
算法重要结论
1、根据二叉树前序遍历和中序遍历的递归算法种递归工作栈的状态变化得出:前序序列和中序序列的关系相当于以前序序列为入栈次序,以中序序列为出栈次序。原创 2022-06-23 22:43:04 · 1619 阅读 · 1 评论 -
JZ79 判断是不是平衡二叉树
描述输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。样例解释:样例二叉树如图,为一颗平衡二叉树注:我们约定空树是平衡二叉树。数据范围: n≤100,树上节点的val值满足 0≤n≤1000要求:空间复杂度O(1) ,时间复杂度 O(n)原创 2022-05-14 21:30:31 · 60 阅读 · 0 评论 -
JZ36 二叉搜索树与双向链表
描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示数据范围:输入二叉树的节点数 0≤n≤1000,二叉树中每个节点的值 0≤val≤1000要求:空间复杂度O(1) (即在原树上操作),时间复杂度O(n)注意:1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继2.返回链表中的第一个节点的指针3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据...原创 2022-05-14 14:33:00 · 95 阅读 · 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 · 238 阅读 · 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 · 261 阅读 · 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 · 137 阅读 · 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 · 77 阅读 · 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 · 602 阅读 · 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 · 906 阅读 · 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 · 759 阅读 · 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 · 1010 阅读 · 0 评论 -
JZ77 按之字形顺序打印二叉树
描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)数据范围: 0≤n≤1500,树上每个节点的val满足|val| <= 1500要求:空间复杂度:O(n) ,时间复杂度:O(n)例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树之字形层序遍历的结果是[[1],[3,2],[4,5]]示例1输入:{1,2,3,#,#,4,5}返回值:[[1],[3,2],[4,5]]...原创 2022-05-03 10:59:29 · 248 阅读 · 0 评论 -
JZ55 二叉树的深度
描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。数据范围:节点的数量满足 0≤n≤100 ,节点上的值满足 0≤val≤100进阶:空间复杂度 O(1) ,时间复杂度 O(n)假如输入的用例为{1,2,3,4,5,#,6,#,#,7},那么如下图:示例1输入:{1,2,3,4,5,#,6,#,#,7}返回值:4示例2输入:{}返回值:原创 2022-05-03 10:12:12 · 144 阅读 · 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 · 170 阅读 · 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 · 689 阅读 · 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 · 125 阅读 · 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 · 64 阅读 · 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 · 80 阅读 · 0 评论 -
JZ52 两个链表的第一个公共结点
描述输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)数据范围: n≤1000要求:空间复杂度O(1) ,时间复杂度O(n)例如,输入{1,2,3},{4,5},{6,7}时,两个无环的单向链表的结构如下图所示:可以看到它们的第一个公共结点的结点值为6,所以返回结点值为6的结点。输入描述:输入分为是3段,第一段是第一个链表的非公共部分,第二段是第二个...原创 2022-04-26 17:57:08 · 89 阅读 · 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 · 81 阅读 · 0 评论 -
1089 狼人杀-简单版 (20 分)
1089 狼人杀-简单版 (20 分)以下文字摘自《灵机一动·好玩的数学》:“狼人杀”游戏分为狼人、好人两大阵营。在一局“狼人杀”游戏中,1 号玩家说:“2 号是狼人”,2 号玩家说:“3 号是好人”,3 号玩家说:“4 号是狼人”,4 号玩家说:“5 号是好人”,5 号玩家说:“4 号是好人”。已知这 5 名玩家中有 2 人扮演狼人角色,有 2 人说的不是实话,有狼人撒谎但并不是所有狼人都在撒谎。扮演狼人角色的是哪两号玩家?本题是这个问题的升级版:已知N名玩家中有 2 人扮演狼人角色,有 2 ..原创 2021-07-16 20:12:07 · 453 阅读 · 0 评论 -
1088 三人行 (20 分)
1088 三人行 (20 分)子曰:“三人行,必有我师焉。择其善者而从之,其不善者而改之。”本题给定甲、乙、丙三个人的能力值关系为:甲的能力值确定是 2 位正整数;把甲的能力值的 2 个数字调换位置就是乙的能力值;甲乙两人能力差是丙的能力值的 X 倍;乙的能力值是丙的 Y 倍。请你指出谁比你强应“从之”,谁比你弱应“改之”。输入格式:输入在一行中给出三个数,依次为:M(你自己的能力值)、X 和 Y。三个数字均为不超过 1000 的正整数。输出格式:在一行中首先输出甲的能力值,随后依次原创 2021-07-15 17:44:51 · 89 阅读 · 0 评论 -
1087 有多少不同的值 (20 分)
1087 有多少不同的值 (20 分)当自然数n依次取 1、2、3、……、N时,算式⌊n/2⌋+⌊n/3⌋+⌊n/5⌋有多少个不同的值?(注:⌊x⌋为取整函数,表示不超过x的最大自然数,即x的整数部分。)输入格式:输入给出一个正整数N(2≤N≤104)。输出格式:在一行中输出题面中算式取到的不同值的个数。输入样例:2017输出样例:1480水题,不过Hash数组要定义大一点。代码:#include<bits/stdc++...原创 2021-07-15 16:47:59 · 70 阅读 · 0 评论 -
1086 就不告诉你 (15 分)
1086 就不告诉你 (15 分)做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三。”本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积。输入格式:输入在第一行给出两个不超过 1000 的正整数 A 和 B,其间以空格分隔。输出格式:在一行中倒着输出 A 和 B 的乘积。输入样例:5 7输出样例:53水题:注意 逆转后高位的0不能输出代码:#include<bits/stdc++.h>u原创 2021-07-15 16:41:38 · 60 阅读 · 0 评论 -
1085 PAT单位排行 (25 分)
1085 PAT单位排行 (25 分)每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜。本题就请你实现这个功能。输入格式:输入第一行给出一个正整数 N(≤105),即考生人数。随后 N 行,每行按下列格式给出一个考生的信息:准考证号 得分 学校其中准考证号是由 6 个字符组成的字符串,其首字母表示考试的级别:B代表乙级,A代表甲级,T代表顶级;得分是 [0, 100] 区间内的整数;学校是由不超过 6 个英文字母组成的单位码(大小写无关)。注意:题目保证每个考生的准考原创 2021-07-15 16:28:20 · 135 阅读 · 0 评论 -
1084 外观数列 (20 分)
1084 外观数列 (20 分)外观数列是指具有以下特点的整数序列:d, d1, d111, d113, d11231, d112213111, ...它从不等于 1 的数字d开始,序列的第 n+1 项是对第 n 项的描述。比如第 2 项表示第 1 项有 1 个d,所以就是d1;第 2 项是 1 个d(对应d1)和 1 个 1(对应 11),所以第 3 项就是d111。又比如第 4 项是d113,其描述就是 1 个d,2 个 1,1 个 3,所以下一项就是d11231。当然...原创 2021-07-13 13:28:35 · 96 阅读 · 0 评论 -
1083 是否存在相等的差 (20 分)
1083 是否存在相等的差 (20 分)给定 N 张卡片,正面分别写上 1、2、……、N,然后全部翻面,洗牌,在背面分别写上 1、2、……、N。将每张牌的正反两面数字相减(大减小),得到 N 个非负差值,其中是否存在相等的差?输入格式:输入第一行给出一个正整数 N(2≤N≤10 000),随后一行给出 1 到 N 的一个洗牌后的排列,第 i 个数表示正面写了 i 的那张卡片背面的数字。输出格式:按照“差值 重复次数”的格式从大到小输出重复的差值及其重复的次数,每行输出一个结果。...原创 2021-07-11 17:53:01 · 74 阅读 · 0 评论 -
1082 射击比赛 (20 分)
1082 射击比赛 (20 分)本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军;谁差得最远,谁就是菜鸟。本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟。我们假设靶心在原点(0,0)。输入格式:输入在第一行中给出一个正整数 N(≤10 000)。随后 N 行,每行按下列格式给出:ID x y其中ID是运动员的编号(由 4 位数字组成);x和y是其打出的弹洞的平面坐标(x,y),均为整数,且 0≤|x|, |y|≤100。题目...原创 2021-07-11 17:37:21 · 97 阅读 · 0 评论