自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 问答 (1)
  • 收藏
  • 关注

原创 LeetCode-问题1123-最深叶节点的最近公共祖先

这些节点中有一些是叶子节点,即没有孩子的节点。这些叶子节点可能有不同的depth,我们把depth最大的那些叶子节点挑出来,问题来了,这些被挑选出来的depth最大的叶子节点,它们的最小公共祖先是哪个节点?解题思路嘛,第一直觉就是按上面的描述把这些depth最大的叶子节点找出来,这个处理还是比较简单的,层级遍历嘛,最后遍历到的那一层就是depth最大的叶子节点。想到的笨办法就是把每个节点的父节点信息维护起来,这样对于给定的一组节点,连续往上查找父节点,直到所有节点相等,那么我们就得到了最小公共祖先。

2023-09-07 19:32:55 92 1

原创 LeetCode-问题449-序列化和反序列化二叉搜索树

这个地方稍作思考,可以发现,如果我们有二叉查找树先序遍历的结果,那么就可以比较方便的构造,逻辑如下:第一个元素显然是根节点,剩下的元素可以一分为二,左边的是左子树,右边的是右子树,而继续构造左子树或右子树的过程也是如此,利用递归很容易实现这个逻辑。OK,通过先序遍历的结果可以重构二叉查找树了,那么如果通过字符串得到先序遍历的结果呢?题目要求很好理解了,简单来说,给定一颗二叉查找树,写两个方法,一个方法可以把二叉查找树序列化为字符串,另一个方法可以把序列化的字符串反序列化为同样结构的二叉查找树。

2023-09-05 20:24:56 78

原创 LeetCode-问题393-UTF8编码验证

基于给定的UTF-8编码规则,判断一个byte array是不是一串有效的UTF-8字符,那么很直接的,就挨个字符遍历判断嘛。如果满足某一种,那么还需要细分,如果是满足单字节编码的要求,那么显然当前字节自己就构成一个有效的UTF-8编码,那么继续判断下一个位置即可;同理,如果是满足三字节或者四字节编码的要求,那么需要进一步判断下面两个或者下面三个位置是不是合法的trailing byte。如果一定要说这个题目的难点的话,我觉得主要考察的是对字符编码和位运算的掌握情况,以及基本的编码能力。

2023-08-07 20:11:42 90 1

原创 LeetCode-问题415-字符串相加

这个题目主要考察基本的字符串操作能力,比较简单了,从题目要求以及参数限制来看,显然转换为整数再相加是行不通的,况且,不使用库函数的话,字符串转整数比这个题目本身还要难一些。这个题目就是逆序遍历字符串,挨个位置相加,注意处理进位即可。

2023-07-17 20:13:54 124 1

原创 LeetCode-问题2544-交替数字和

这个题目比较简单了,稍微麻烦一点的地方是通过取余计算得到每一位数字的顺序和正负符号的赋值顺序相反,通过一个栈暂存下即可。

2023-07-12 19:33:56 36 1

原创 LeetCode-问题2178-拆分成最多数目的正偶数之和

设定上述方式得到的分解方式包含的元素个数为n,如果n不是最优结果,那么必然存在包含元素数为n+1的分解方式,根据我们的分解逻辑,n+1的这种分解方式必然大于目标值了。其实本地自测的时候就隐约觉得不对劲,比如,一个并不大的目标值28,可能的分解方式已经很多了,但其实第一个回溯出的结果就是满足题目要求的。这个题目乍一看有点唬人,翻译一下就是把一个数做偶数之和分解,要求不能有重复元素,可能有多种分解方式,求包含元素最多的分解方式包含的元素个数。如果是偶数,那么怎么计算包含元素最多的分解方式包含的元素个数呢?

2023-07-10 20:05:18 39 1

原创 LeetCode2481-分割圆的最少切割

再稍作思考,才发现问题所在。由此可推,是否能将2个半长的cut连成1个全长的cut,只取决于n是否能被2整除,只要能被2整除,那么就可以减半cut数。这个地方我一开始陷入了一个错误的思路,我的直觉是需要考虑n等分后1个角的大小是否能整除180度,比如,将一个圆6等分,6条半长的cut肯定够了,但是180/60=3,所以只需要3条全长的cut就够了。这个题目的关键就在于,这n个半长的cut中如果有2条可以连成1条全长的cut,就等于减小了一个cut,也就是说可能不需要n条边那么多就能将一个圆n等分。

2023-07-03 20:50:24 39 1

原创 LeetCode-问题2611-老鼠和奶酪

以示例问题为例,数组1是{1,1,3,3},数组2是{4,4,1,1},现在要从数组1中挑2个元素,从数组2中挑其余2个元素,怎么挑能使得挑出来的元素之和最大呢?要不要挑数组1的第1个元素,显然不要,因为数组1的第1个元素是1,数组2的第1个元素是4,如果希望和最大,那么应当尽量倾向数组2的第1个元素被挑出来。同理,数组1的第2个元素也不应该被挑出来。翻译一下,给定两个等长的数组,现在从数组1的k个位置挑k个元素,从数组2挑其余位置的n-k个元素,期望的是挑出来的元素之和最大,求这个最大和是多少。

2023-06-08 20:03:21 156 1

原创 LeetCode-问题2352-相等行列对

题目本身并不难理解,给定一个n*n的二维数组,按行列去找相等的pair,换句话说,用每一行和每一列来组合并判断是否相等。按照这样的思路,直接双重循环就可以了。判断某一行和某一列是否相等时,注意early return,碰到第一个不相等的元素即可返回,想来效率不会太差。但是,考虑到题目难度设置是中等,是不是有更高效的解法呢?思考了下,实在没有思路,先写个暴力解法的再说。代码提交以后没有问题,而且效率也还可以。看了下官方题解,其中对行和列做某种形式转换再基于哈希表做查询计数的思路有一定启发性,有时间再研究下。

2023-06-06 19:32:22 113 1

原创 LeetCode-问题1110-删点成林

由以上结论,直觉上比较容易想到我们需要将每个节点的父节点维护起来,方便我们快速将某个节点的父节点置为null,或者由某个节点找到它的父节点进而修改父节点的左节点或右节点的值。根据题目限制,节点数是有限的,节点的值也是有限的,所以通过数组就可以很方便维护每个节点的父节点。但是考虑到可能有不存在的节点的父节点值也是null,我们再维护一个self数组,这个数组记录的是每个节点本身,用于最后过滤掉不存在或已删除的节点。额,坦白讲,代码看起来是有一点凌乱有一点丑的,提交以后可以通过,但是效率也较差。

2023-05-31 19:35:22 34

原创 LeetCode-问题1015-可被K整除的最小整数

对于题目而言,其实我们关心的是当前遍历到的完全由数字1组成的整数对k取余的结果,当取余为0时,说明我们找到了满足题目要求的整数。对于第二个问题,直接说答案吧,如果对于给定的k,不存在满足题目要求的整数,那么由小到大遍历完全由数字1组成的整数,并对k取余,这个余数一定是1到k-1中的一个,并且会按一定顺序挨个出现,直到重复。题目本身不难理解,给定一个整数k,求完全由数字1组成的、能被k整除的、最小的那个整数包含的数字1的个数。另外,对于尾数是偶数或者是5的,可以直接返回,肯定不会存在满足题目要求的整数。

2023-05-10 20:16:45 29

原创 LeetCode-问题2437-有效时间的数目

这个题目是比较简单了,如果考编码时出类似题目,应该是绿灯放行的意思了吧。虽然题目的解答思路不难,但我觉得这个题目还是能考察下代码能力的,尤其是能不能把代码写得简单清晰易理解。

2023-05-09 19:23:45 33

原创 LeetCode-问题2106-摘水果

一开始我的想法是用类似宽度优先遍历BFS的方式去暴力计算,模拟k步,每一步计算当前可能到达的点是哪些,以及每一个可能到达的点的累加水果数,最终取走完k步后能到达的点中累加水果数最大的那一个。startPos以左能到达的每个点内累加的水果数恰恰是可以预加工出来的,startPos以右能到达的每个点内累加的水果数也是一样可以预加工出来的。题目要求并不难理解,从某个startPos开始,每一步可以向左走或者向右走,最多可以走k步,凡是经过的点的水果就可以收割,求最多能收割多少水果。

2023-05-06 20:22:35 91 1

原创 LeetCode-问题1105-填充书架

处理第二本书,如果不换层,那么总层高是第一本书和第二本书高度的较大值,如果换层,那么总层高是第一本书和第二本书高度之和,显然不换层是更好的选择,但是是不是可以不换层要看两本书的宽度是否满足书架宽度的限制,如果一层放不下,只能换层,如果一层能放下,显然就不换层,由此我们可以得到处理完第二本书后的最小总层高,我们记为dp[1]。从直觉上,要想让总层高最小,那么就应该尽量把高度大的书摆放到同一层,因为每一层的高度是由这一层中最高的书决定的,如果高度大的书摆放到了不同层,那么显然有悖于目标。

2023-04-28 14:18:54 118 1

原创 LeetCode-问题1026-节点与其祖孙之间的最大差值

题目要求并不难理解,翻译一下,从root到每个叶子节点有一条path,这条path上最大值和最小值有一个差,现在要计算的是所有path中差最大的那一条对应的差是多少。最直接粗暴的想法,那就遍历所有path嘛,每遍历完一条path,计算一下当前path中最大值和最小值的差,并维护最大差,当遍历完所有path后,即得到了最终答案。如何遍历所有path呢?上面两种写法都通过了,但是时间效率都很差,看了一眼官方题解,额,显然思路更高级,但是没完全理解,有时间再研究下。

2023-04-21 21:19:35 31 1

原创 LeetCode-问题2409-统计共同度过的天数

这个题目从解题思路来说,确实没有什么难度,稍作分析,可以确定,取Alice和Bob较大的到达日期作为起始日期,取Alice和Bob较小的离开日期作为结束日期,然后计算起始日期到结束日期包含的天数即可。因为日期的格式是固定的,直接取对应子串即可解析出month和day,计算包含的天数时注意可能跨月。

2023-04-17 21:17:44 38 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除