LeetCode
文章平均质量分 55
Hydrion-Qlz
啥都想学又都没时间开始的大学牲
(如需博客中某文件pdf或者是需要什么资源可直接邮箱联系
qlz_huo@163.com
展开
-
每日一题----美国血统 American Heritage(4.12)
每日一题----[USACO3.4] 美国血统 American Heritage题目链接这个题实际上就是根据树的前序遍历和中序遍历来构造这颗树,同时根据构造结果得到后续遍历结果如果对于与树遍历相关的基础知识不了解的话可以去看看这篇博客和树相关的题目基本上都可以通过递归去解决,这个题也是一样的,首先需要确保自己能根据前序遍历和中序遍历的结果可以手动构造出来这棵树,然后再是找到规律通过代码去实现对于中序遍历来说,首先找到根节点,根节点的左边是树的左子树,根节点的右边是它的右子树对于前序遍历原创 2022-04-12 13:19:27 · 933 阅读 · 3 评论 -
每日一题训练----字符串哈希 (4.10)
字符串哈希P3370 【模板】字符串哈希 - 洛谷 这个题直接使用Set去重,然后最后统计set大小就行了不知道是我理解错题目意思了吗,感觉像是需要自己实现一个hash,或许这是他题目第二句话的意思,如果要自己实现的话就需要自己首先实现一个hash函数,也就是把字符串映射到一个数组,然后再处理一下hash冲突即可。处理hash冲突一般都是在冲突位置建立一个链表存储所有hash值相同的数据,java中的hashmap类也是这么实现的,但是他在数据量超过8之后有一个将链表转换为红黑树的操作,当数据量原创 2022-04-10 15:46:44 · 711 阅读 · 0 评论 -
每日一题----P4715 淘汰赛 (4.15)
每日一题----P4715 淘汰赛 (4.15)题目连接:P4715 【深基16.例1】淘汰赛 这个题就是一个稍微复杂一点的模拟题,需要找出来每一次每一组中哪一组晋级了,同时还需要同时保存它的能力值和序号,因此需要创建辅助类Node我使用的是数组来记录所有的晋级情况,score[0]表示刚读进来的输入,score[1]表示第一轮结束后的情况,依次类推,那么score[n-1]就表示最后一轮的情况,其中能力值较小者就是我们需要的答案对于题目所给样例中,数组中值如下(这里仅写出了能力值,另外还需要有原创 2022-04-15 09:59:26 · 391 阅读 · 1 评论 -
每日一题题目分类型汇总包含常用算法模板 [java](连载中...)
本专栏每日更新,欢迎大家三连加订阅文章目录数据结构数组字符串队列栈哈希树并查集算法递归DFS(回溯法)BFS动态规划贪心二分法模拟其他日期类这个文档主要用来汇总刷过的不同类型的题目另外如果一个题目涉及到多个方面的技术会在所有相关的技术下面列出这个题目,方便想突破一个技术问题的同学其中难度分为三种:⭐️:简单,签到题或者纯模板题⭐️ ⭐️:中等,看题可以想到用什么方法,但是可能需要处理一些小细节⭐️ ⭐️ ⭐️:困难,看一眼整个人都是懵的,要仔细思考才能做出来的本文由个人维护,如果发现有原创 2022-04-11 13:22:50 · 674 阅读 · 2 评论 -
每日一题----P4913 二叉树深度 (4.13)
每日一题----P4913 二叉树深度 (4.13)题目链接:https://www.luogu.com.cn/problem/P4913这个题就是求树的高度就行,有两种方法可以求树的高度,一种是dfs;一种是bfs。dfs的思想是求得每一棵树左子树和右子树的高度,然后当前结点的高度就是最大高度+1,然后递归求解bfs其实就是层序遍历,遍历每一层的所有结点,把他的子节点加入队列中,直到所有结都遍历一遍我这里两种方法都写了,但是都没用通过所有用例。。。菜鸡如我了dfs的话我知道是因为题目原创 2022-04-13 13:21:08 · 600 阅读 · 0 评论 -
python基础语法及数据结构练习--day01
文章目录位1的个数整数的各位积和之差两数之和合并两个有序数组位1的个数题目链接:191. 位1的个数这个题目传入的是一个十进制的数,我们首先需要把他转换为二进制的样子,然后再统计每一位分别是多少而对于转化成二进制有很多方法,常用的有循环除2法与2的n次方进行与运算这里用的是第二种方法# -*- coding:utf-8"""作者: Jia日期: 2022年04月18日描述: https://leetcode-cn.com/problems/number-of-1-bits/原创 2022-04-18 13:16:33 · 797 阅读 · 0 评论 -
每日一题----P1226 快速幂||取余运算(4.24)
每日一题----P1226 快速幂||取余运算(4.24)P1226 【模板】快速幂||取余运算 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)这个题曾经备战蓝桥杯时候写过题解,就直接copy过来了,然后要注意的就是数据定义时候要开成long,看题目的范围都是在int范围内的,但是平方之后就会越界,开int会导致后面都WA(亲身经历hhh)首先有一个算式需要知道一下(a∗b)%c=((a%c)∗(b%c))%c(a*b)\%c=((a\%c)*(b\%c))\%c(a∗b)%c原创 2022-04-24 13:50:19 · 185 阅读 · 2 评论 -
每日一题----亲戚 (4.11)
亲戚题目链接这个题目是一个很标准的并查集,如果不会的话可以先看看这个笔记,我也是看这篇学习的,最好是能理解了,如果理解不了直接当成模板背过也可以,方便后面使用主要分为三个部分初始化,把每个人都初始化成一个只有自己的集合,union,也就是根据题目给的同类的信息进行合并find,判断两个人是不是属于同一个集合我下面这种写法是带路径压缩的,可以很好的缩短寻找时间package cn.edu.xjtu.daily.April.day_4_11;import java.util.Sca原创 2022-04-11 13:03:25 · 308 阅读 · 1 评论 -
每日一题----P1305 新二叉树 (4.14)
每日一题----P1305 新二叉树 (4.14)题目连接:P1305 新二叉树 - 洛谷 这个题非常基础了,考察的就是树的遍历问题树的前序,中序,后序,以及层序遍历的递归以及非递归算法都必须要很熟练的能写出来这里我写出来了前序遍历的递归和非递归算法,如果自己不太理解的话,建立对照题目的示例,自己手动看一下栈里面是怎么变化的递归算法和非递归算法其实没有什么区别递归算法是通过不断的调用函数本身,将状态存在系统栈内实现的;非递归算法是通过自己维护一个栈来确保遍历顺序以及打印顺序;pac原创 2022-04-14 13:27:10 · 221 阅读 · 1 评论 -
python基础语法及数据机构联系--day02
文章目录三角形的最大周长找到最近的有相同X或Y坐标的点两个数组的交集II买卖股票的最佳时机三角形的最大周长题目链接:976. 三角形的最大周长看到这个题的初始想法应该就是三重遍历遍历所有的组合情况,然后找到符合条件的最大周长,但是这种看看数据范围就知道肯定会超时所以使用的方法是:排序+贪心首先对数组进行排序(排序),然后从后向前遍历(贪心)贪心是怎么贪的呐?你要找最大周长,那我就找每条边都可以取到最大的边,如果他们可以组成三角形,那么他组成的三角形一定是最大的# -*- coding:u原创 2022-04-19 11:23:51 · 1039 阅读 · 0 评论 -
每日一题----P1060 [NOIP2006 普及组] 开心的金明 (4.30)
每日一题----P1060 [NOIP2006 普及组] 开心的金明NOIP2006 普及组] 开心的金明 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)这个题是一个标准的01背包问题首先确定读入元素的存储格式,可以新建一个类或者是定义两个一维数组,我这里使用的是二维数组存储,不论什么形式,只要心里明确对应位置是什么东西就可以了然后是确定递归的必要元素(这个是从代码随想录里学到的,因此步骤与它一致,少了第五步的举例递推)首先需要明确背包的每个元素的意义为:当总价值不超过ii原创 2022-04-30 19:00:07 · 312 阅读 · 0 评论 -
递归法实现二叉搜索树中的插入操作
701. 二叉搜索树中的插入操作难度:中等给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。思路向BST中插入值时需要判断插入值和当前节点的值的大小如果插入值小于当前节点的值,则在当前节点的左子树寻找合适的位置如果插入值大于当前节点的值,则在当前节点原创 2022-02-13 14:54:41 · 623 阅读 · 0 评论 -
把二叉搜索树转换为累加树(反向中序遍历)
538. 把二叉搜索树转换为累加树难度:中等给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。**注意:**本题和 1038: https://leetcode-cn.com/problems/binary-原创 2022-02-13 14:47:55 · 97 阅读 · 0 评论 -
递归法求二叉树的最近公共祖先
236. 二叉树的最近公共祖先难度:中等给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。思路如果这个题看不明白的话可以先看看求二叉搜索树的最近公共祖先共有三种情况两个节点都比当前节点小,则都在当前节点的左子树上两个节点都比当前节点大,则都在当前节点的右子树上一个比当前节点大(等于),一个比当前节原创 2022-02-13 14:43:26 · 426 阅读 · 1 评论 -
递归法求二叉搜索树的最近公共祖先
235. 二叉搜索树的最近公共祖先难度简单759收藏分享切换为英文接收动态反馈给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”思路这个题一定要利用好BST树的性质!共有三种情况两个节点都比当前节点小,则都在当前节点的左子树上两个节点都比当前节点大,则都在当前节点的右子树上一个比当前节点大,原创 2022-02-13 14:33:56 · 137 阅读 · 0 评论 -
递归法将有序数组转换为二叉搜索树
108. 将有序数组转换为二叉搜索树难度简单给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。思路题目中说要转换为一棵高度平衡二叉搜索树。这和转换为一棵普通二叉搜索树有什么差别呢?平衡的话我们很自然就会想到从数组中间去分割数组,将中间元素作为根节点,使用左侧的节点构造左子树,使用右侧的节点构造右子树,然后对于左侧与右侧的元素不断递归构造,直到区间长度为0为止原创 2022-02-13 14:27:19 · 468 阅读 · 0 评论 -
在二叉搜索树(BST)中搜索某个元素
700. 二叉搜索树中的搜索难度简单给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。思路对于二叉搜索树(BST)来说左子节点的值小于当前节点的值右子节点的值大于当前节点的值因此对于一个特定的节点我们只需要判断当前节点与目标值的大小关系,然后不断遍历即可是不是看起来很像二分法?其实BST的中序遍历就是一个升序数组!如果不理解的话请记住这个结论,这在解决原创 2022-02-12 15:24:56 · 704 阅读 · 0 评论 -
求二叉搜索树中的众数(使用中序遍历当成有序数组来处理)
501. 二叉搜索树中的众数难度简单给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。如果树中有不止一个众数,可以按 任意顺序 返回。假定 BST 满足如下定义:结点左子树中所含节点的值 小于等于 当前节点的值结点右子树中所含节点的值 大于等于 当前节点的值左子树和右子树都是二叉搜索树思路这里的定义与我们一般碰见的BST的定义不同,所以需要清楚的是在左子树以及右子树都有可能出现等于当前节点的值,所以单独进行递归时非原创 2022-02-12 15:23:32 · 206 阅读 · 0 评论 -
二叉搜索树的最小绝对差(使用中序遍历当成有序数组来处理)
530. 二叉搜索树的最小绝对差难度简单给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。思路题目需要求在二叉搜索树上任意两节点的差的绝对值的最小值。注意是二叉搜索树,二叉搜索树可是有序的!在二叉搜索树上进行中序遍历,获得的其实就是一个有序数组,在有序数组上求最小差值,是不是就很简单了?package cn.edu.xjtu.carlWay.tree.minAbsoluteDifferenceInBST;imp原创 2022-02-12 15:18:31 · 408 阅读 · 0 评论 -
递归法验证一颗树是不是二叉搜索树(BST)
98. 验证二叉搜索树难度中等1407给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。思路验证一棵树是不是BST树,我们必须对BST的定义非常清楚左子树的所有节点的值都小于当前节点的值右子树的所有节点的值都大于当前节点的值因此我们在进行递归遍历的时候需要保留从根节点到当前节点的最大值以及最小值由于题目中说明原创 2022-02-12 15:14:36 · 480 阅读 · 0 评论 -
递归法实现二叉树的合并
617. 合并二叉树难度简单给你两棵二叉树: root1 和 root2 。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。注意: 合并过程必须从两个树的根节点开始。思路对于树来说,大多数的题都可以通过递归来实现,本题也不例外对于每一个节点,判断当前两颗树对应的节点是原创 2022-02-12 15:05:48 · 160 阅读 · 0 评论 -
递归法构造最大二叉树
654. 最大二叉树难度中等给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。返回 nums 构建的最大二叉树。思路本题可以使用递归法求解,类似于快排的解法我们在当前的范围中找到最大值,然后不断递归其左侧与右侧范围,重复寻找当前范围的最大值并不断递归,直到该区间长度为0package cn.e原创 2022-02-12 15:01:48 · 536 阅读 · 0 评论 -
递归法从前序与中序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树难度中等给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。思路需要明白的知识点有:中序遍历中一个节点的左侧是它的左子树的所有节点,右侧是它的右子树的所有节点前序遍历中的第一个节点是当前节点,其左子树和右子树均在其右侧我们可以根据前续遍历找到当前节点,然后找到当前根节点在中序数组中的位置,进而由根节点的位置及其子树的范围确定新的左子树原创 2022-02-12 14:57:40 · 345 阅读 · 0 评论 -
递归法从中序与后序遍历序列构造二叉树
106. 从中序与后序遍历序列构造二叉树难度中等给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。思路需要明白的知识点有:中序遍历中一个节点的左侧是它的左子树的所有节点,右侧是它的右子树的所有节点后续遍历中的最后一个是当前节点,其左子树和右子树均在其左侧我们可以根据后续遍历找到当前节点,然后找到当前根节点在中序数组中的位置,进而由根节点的位置及其子树的范围确定新的左原创 2022-02-12 14:55:51 · 668 阅读 · 0 评论 -
使用递归法和迭代法求N叉树的最大深度
559. N 叉树的最大深度难度:简单给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。思路n叉树的最大深度与2叉树的最大深度其实就是一个问题,只不过对于2叉树来说可以直接写完它的子节点(左节点和右节点),n叉树来说需要使用一个循环去进行遍历子节点,可以先参考使用递归法和迭代法求二叉树的最大深度_Qlz的博客-CSDN博客搞明白求二叉树的最大深度后再来思考这个。本文使用两种方法分原创 2022-02-08 16:49:46 · 430 阅读 · 0 评论 -
使用递归法求二叉树的最小深度
111. 二叉树的最小深度难度:简单给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。代码package cn.edu.xjtu.carlWay.tree.minDepth;import cn.edu.xjtu.Util.TreeNode.TreeNode;/** * 111. 二叉树的最小深度 * 给定一个二叉树,找出其最小深度。 * <p> * 最小深度是从根节点到最近叶子节点的最短路径原创 2022-02-08 16:45:34 · 267 阅读 · 0 评论 -
使用递归法和迭代法求二叉树的最大深度
104. 二叉树的最大深度难度:简单给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。思路本文使用两种方法分别解决该问题递归法迭代法一个节点的深度是他的左节点的深度与右节点深度的最大值 + 1,对于递归法来说,可以直接实现这种逻辑。对于迭代法来说,我们可以一层一层遍历这棵树,然后统计总层数。package cn.edu.xjtu.carlWay.tree.maxDepth;import cn.edu.原创 2022-02-08 16:40:47 · 187 阅读 · 0 评论 -
使用迭代法和递归法实现翻转二叉树
226. 翻转二叉树难度:简单给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。思路本文使用两种方法分别解决该问题递归法迭代法主要思路都是将一个节点的左子节点和右子节点交换位置,然后再按照这种方法处理其他节点,直到将整棵树都处理完成package cn.edu.xjtu.carlWay.tree.invertTree;import cn.edu.xjtu.Util.TreeNode.TreeNode;import java.util.Deque;import原创 2022-02-08 16:37:26 · 441 阅读 · 0 评论 -
多种方法实现统计完全二叉树的节点个数
222. 完全二叉树的节点个数难度:中等给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。思路本文总共实现了三种方法直接递归版本,没有利用到完全二叉树的特性迭代版本,没有利用到完全二叉树的特性递归版本,利用完全二叉树的特性进行计算直接递归版本/** * 直接递归版本,没有原创 2022-02-08 16:32:06 · 610 阅读 · 0 评论 -
使用层次遍历法寻找一颗树左下角的值
513. 找树左下角的值难度:中等给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。易错点这个题注意一个容易错的地方:本题需要的左下角的值是指最后一行最左侧的叶节点的值,而不是单纯最左侧的值!!例如对于下面的树来说,需要返回的值是7而不是4!所以以下代码是不行的:TreeNode node = root;//根节点while(node.left != null){ node = node.left;}return node.原创 2022-02-08 16:26:54 · 435 阅读 · 0 评论 -
求二叉树根节点到叶节点的所有路径
257. 二叉树的所有路径难度:简单给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。思路使用迭代法,从根节点开始到叶节点结束,利用StringBuilder记录下当前路径,发现到叶节点后将该路径加入到返回的List中注意:在使用StringBuilder记录路径时候需要注意传入子程序的StringBuilder是当前StringBuilder的拷贝,因为传入的参数是引用类型,如果直接将原来的传入会导致结果返回的List中所有元原创 2022-02-08 16:20:04 · 1074 阅读 · 0 评论 -
判断一棵树是不是平衡二叉树
110. 平衡二叉树难度简单881收藏分享切换为英文接收动态反馈给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。思路本例使用的是从下而上递归法,是通过求树的每个节点的高度来判断在该节点是否满足平衡二叉树的定义如果使用从上而下递归法,即求每个节点的深度(注意深度和高度的区别),这样会将底层的节点遍历多遍,浪费时间package cn.edu.xjtu.carlWay.tree.balance原创 2022-02-08 16:15:12 · 215 阅读 · 0 评论