![](https://img-blog.csdnimg.cn/direct/9667da5f8e1b4983955289f4c447da49.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Leetcode每日题解
文章平均质量分 69
算法新手-更新每日Leetcode题目思路、题解分享
JieHou828
这个作者很懒,什么都没留下…
展开
-
20240404-1544.把字符串变好
给定一个由小写和大写英文字母组成的字符串 s。一个好的字符串是没有两个相邻字符 s[i] 和 s[i + 1] 的字符串,其中:0原创 2024-04-05 11:00:26 · 266 阅读 · 0 评论 -
20240226-100. 同一棵树
如果每棵树中的节点总数为 n(假设两棵树的结构和节点数都相同,以进行最坏情况分析),则时间复杂度为 O(n),其中 n 是树中的节点数。- 在最坏的情况下,树是完全不平衡的,例如,每个节点只有一个子节点,导致递归深度为 `n`,其中 `n` 是树中的节点数。- 在最好的情况下,树是完全平衡的,树的高度为 log(n),因此调用栈导致的最好情况下的空间复杂度为 O(log(n))。因此,isSameTree 函数的时间复杂度为 O(n),其中 n 是两棵树中较大的一棵树的节点数。原创 2024-02-27 07:39:36 · 465 阅读 · 0 评论 -
20240223-2092.查找所有有秘密的人
但是,使用路径压缩后,时间复杂度接近于常数时间,平均复杂度为 \(O(\alpha(n))\),其中 \(\alpha(n)\) 是Ackermann函数的反函数,对于所有实际的输入值几乎可以认为是常数。但这不会超过 \(O(m)\)。在最坏情况下,每次合并操作的时间复杂度为 \(O(\alpha(n))\),因此总的时间复杂度为 \(O(m \alpha(n))\)。- 首先,按时间对会议进行排序,其时间复杂度为 \(O(m \log m)\),其中 \(m\) 是会议的数量。原创 2024-02-26 15:34:45 · 849 阅读 · 0 评论 -
20240221-查找城镇法官
如果存在法官那么一定意味着有一个人不信任任何人,也就是他不会出现在trust[i]中的a[i]位置上即可,其次他会在b[i]的位置上出现n-2次。给你一个数组 trust,其中 trust[i] = [ai,bi] 表示标有 ai 的人信任标有 bi 的人。如果 trust 数组中不存在信任关系,那么这种信任关系就不存在。在一个小镇上,有 n 个从 1 到 n 的人。如果小镇法官存在且可以识别,则返回小镇法官的标签,否则返回-1。2. 每个人(除了小镇法官)都信任小镇法官。1. 小镇法官不信任任何人。原创 2024-02-22 14:27:26 · 168 阅读 · 0 评论 -
20240219-2的幂
这是因为n是2的幂次方,意味着它的二进制表示中只有一个1,减去1之后,这个1就变成了0,而且1后面的所有0都变成了1。首先,我们知道如果一个数是2的幂次方,那么它的二进制表示中只有一个1,并且1后面跟着若干个0。对于两个二进制数,只有在相同位置上的两个位都为1时,结果的该位才为1;否则,结果的该位为0。给定一个整数 n,如果它是 2 的幂,则返回 true。如果存在一个整数 x,使得 n == 2^x,则整数 n 是 2 的幂。有一个位运算的技巧是,对于任何一个数n,如果n是2的幂次方,那么。原创 2024-02-20 10:50:26 · 148 阅读 · 0 评论 -
20240217-您能到达的最远建筑物
梯子是论个数的,每一个可以无视高度,而砖块则是有限个数,需要足够多的砖块才能够到达下一栋楼。如果我们跳出来看,可以都先使用梯子来完成,并且记录梯子跨过的高度,当遇到比之前更大的高度(更需要用梯子来跳过),我们则把之前用梯子跨过的高度换成砖头。最基本的想法肯定是,当楼高的差值特别大的时候我们就用梯子,如果比较小我们就尽可能用砖块,梯子留着给高楼用。是一种自动排序的队列,它保证每次取出的元素都是队列中的最大值(或最小值,取决于如何配置)。如果当前建筑的高度大于或等于下一栋建筑的高度,则不需要梯子或砖块。原创 2024-02-18 09:58:08 · 987 阅读 · 0 评论 -
20240215-查找周长最大的多边形
排序之后我们的,我的的dp数组需要存储的是截止到nums中的第i个元素的最长多边形的周长(多边形的边数量需要大于等于3)。如果这个sum大于当前的nums[i],就意味着我们在满足条件1的同时也满足了条件2,即可以把nums[i]加入到多边形中,然后更新多边形的周长即可。第二这种方法要求我们需要存储以当前边为结尾的最长多边形的和,也就是意味着我们需要把当天的第i个元素视作是多边形的最长边,那么我们需要做的就是在之前所有元素中找到元素之和能够大于当前的最长边即可。多边形的周长是边长之和。原创 2024-02-16 04:01:29 · 895 阅读 · 0 评论 -
20240216-删除 K 个唯一整数后的最少数量
用一个哈希表遍历一遍,我们就得到了arr中每个元素出现的次数,然后利用贪心的思维,从小到大把出现次数少的全部删掉,出现次数多的保留,统计留下的元素个数即可。给定一个整数数组 arr 和一个整数 k。求恰好删除 k 个元素后唯一整数的最少个数。遍历操作O(n),排序O(nlogn),总体时间复杂度O(nlogn)。map、nums分别用来存储,复杂度O(n)。原创 2024-02-17 04:50:45 · 234 阅读 · 0 评论 -
20240209-最大可整分子集
要求新加入的元素能够整除前一个元素,所以这里在遍历i的同时,可能还需要遍历之前所有的数来检查是否能够整除:dp[i] = max(dp[i], dp[j]+1) {if nums[i] % nums[j] == 0}再思考一下,在数组中寻找一个特定要求的子序列,那么如果我们把数组进行排列,这个题目就变成了寻找“最长上升子序列”类似的题目,因为我们要求每两个数之间具备整除关系,这就意味着其中一个一定大于等于另一个。我们需要在判断dp[i]和dp[j]的大小时,动态的存储i对应的前一位的位置j。原创 2024-02-10 01:56:38 · 365 阅读 · 0 评论 -
20240123-二叉树中的伪平行路径
在这个上下文中,"当前节点值的位"指的是一个位掩码中的一个特定位,该位代表了一个从1到9的数字。在我们的场景中,我们使用位掩码的每一位来表示数字1到9是否在当前路径上出现了奇数次。判断回文我们只需要统计一个路径上字符出现的次数,要么全部为偶数,要么只有一个数字为奇数则是回文。:对于每一位,如果两个操作数的相应位一个是1另一个是0,则结果为1。:对于每一位,如果两个操作数的相应位中至少有一个为1,则结果为1。:对于每一位,只有两个操作数的相应位都是1时,结果才为1。这个操作的效果是将位掩码中的最低位的。原创 2024-01-26 18:24:09 · 1175 阅读 · 0 评论 -
20240125-边界外路径
有一个m*n的网格,网格中有一个小球。您可以将小球移动到网格中相邻的四个单元格之一(可能会越过网格边界移出网格)。状态转移关系:在maxMove步之内从(i,j)位置踢出界外的路径数量等于在maxMove-1步之内从(i,j)的相邻位置踢出界外的路径数量之和。给定 m、n、maxMove、startRow、startColumn 这五个整数,返回将小球移出网格边界的路径数。这个题目有三个状态:横坐标、纵坐标和可移动的次数,所以我们可以用一个三维的dp数组存储这三个状态或者一个带有三个参数的dp函数。原创 2024-01-27 03:26:44 · 287 阅读 · 0 评论