leetcode每日一题
文章平均质量分 60
记录leetcode每日一题题解
EQUINOX1
分享学习过程
展开
-
01背包+枚举,
选:f(i, j) += f(last[i], j - 1),last[i] 为 nums[i] - nums[k] >= d中最靠右的k,这个可以O(NlogN)预处理。事实上我们这样计算即可:res += (d - prev) * f[n][k],prev为上一个枚举的差值。定义状态 f(d, i, j) 前 i 个数,拿了 j 个数 , 最小差值 >= d的能量和。然后由于我们定义状态是 >= d的能量和,我们不知道其中有多少=d的。不选:f(i, j) = f(i - 1, j)原创 2024-07-23 13:48:37 · 241 阅读 · 0 评论 -
费用流,LeetCode 2850. 将石头分散到网格图的最少移动次数
LC原来有网络流的题啊原创 2024-07-20 15:22:23 · 206 阅读 · 0 评论 -
最短路,LeetCode 3112. 访问消失节点的最少时间
从图中消失的时间点,在那一刻及以后,你无法再访问这个节点。,图有可能一开始是不连通的,两个节点之间也可能有多条边。时间复杂度: O(NlogN)空间复杂度:O(N)在松弛操作那里加一个disappear的判断即可。就是dijkstra板子题。单位时间通过的无向边。原创 2024-07-18 12:39:14 · 392 阅读 · 0 评论 -
并查集,LeetCode 721. 账户合并
现在,我们想合并这些账户。如果两个账户都有一些共同的邮箱地址,则两个账户必定属于同一个人。请注意,即使两个账户具有相同的名称,它们也可能属于不同的人,因为人们可能具有相同的名称。一个人最初可以拥有任意数量的账户,但其所有账户都具有相同的名称。由于有相同邮箱的账户是同一个人的账户,于是我们可以按照邮箱将每个账户编号合并,这可以用并查集来实现,然后把一个连通块的邮箱汇总排序即可。合并账户后,按以下格式返回账户:每个账户的第一个元素是名称,其余元素是。时间复杂度: O(NlogN)空间复杂度:O(NlogN)原创 2024-07-15 13:55:14 · 366 阅读 · 1 评论 -
双指针,LeetCode 2972. 统计移除递增子数组的数目 II
对于每个j(满足num[j, ..., n - 1]递增),我们可以指针后移或者二分得到最靠右的nums[i],其中nums[i] < nums[j],那么含后缀nums[j, ..., n - 1]的答案数目取决于我们保留前缀的数目,显然是i +2。否则,我们考虑最长递增前缀的末尾下标为i,那么只保留前缀的结果有i + 2个(注意可以为空)对于本身就是递增数组的数组,答案就是(n + 1) * n / 2,直接特判。考虑我们要的递增数组是一个前缀一个后缀拼接的,且前缀后缀可以为空。原创 2024-07-10 13:28:09 · 472 阅读 · 0 评论 -
数学,LeetCode 3102. 最小化曼哈顿距离
如何高效求最大曼哈顿距离?原创 2024-07-09 16:50:36 · 425 阅读 · 0 评论 -
中位数贪心,3086. 拾起 K 个 1 需要的最少行动次数
扫描一遍k - maxChanges的窗口,O(1)计算其中位数贪心下的解维护最优解即可。3个以内的连续1的最大连续长度记为c,如果拿掉c个剩下的1可以都通过2步得到。Alice 在玩一个游戏,游戏的目标是让 Alice 使用。如果1、2、3个连续个1,我们发现此时分别需要0、1、2步。我们的答案就是c - 1 + (k - c) * 2。否则,问题就变成了一个很简单的中位数贪心问题。,Alice 会拾起一个 1 ,并且。操作1其实就是提供了一种两步得到1的方案。我们考虑两步一个1一定是最优的吗?原创 2024-07-04 16:43:48 · 402 阅读 · 0 评论 -
差分,LeetCode 2779. 数组的最大美丽值
定义是:经由原数组删除一些元素(也可能不删除)得到的一个新数组,且在此过程中剩余元素的顺序不发生改变。时间复杂度: O(max(nums) + n)空间复杂度:O(max(nums))我们可以用线段树或者树状数组,不过显然,差分数组是更好的选择。遍历原数组,每次对[k - x, x + k]进行+1操作。维护完差分数组后,我们对差分数组求一遍前缀和取最大值即可。定义为数组中由相等元素组成的最长子序列的长度。我们可以用数组来记录区间内每个数字的被覆盖次数。执行上述操作任意次后,返回数组可能取得的。原创 2024-06-15 16:19:36 · 491 阅读 · 0 评论 -
LeetCode 2786. 访问数组中的位置使分数最大
而我们每次无非就是从前面某个奇数结尾或者偶数结尾转移。那我们不妨只记录奇偶结尾的最大收益,然后进行转移即可。我们并不关注前面状态具体的值,我们只关注奇偶性。时间复杂度: O(N)空间复杂度:O(1)f[i]为前i元素以i结尾的最大收益。但是我们发现我们状态转移和奇偶性有关。不难写出O(N^2)的朴素dp。这样状态转移就变成了O(1)的。原创 2024-06-14 23:24:54 · 376 阅读 · 0 评论 -
反悔贪心,LeetCode 2813. 子序列最大优雅度
经典的堆式反悔贪心原创 2024-06-13 14:40:57 · 380 阅读 · 0 评论 -
一次遍历,419. 甲板上的战舰
两艘战舰之间至少有一个水平或垂直的空位分隔 (即没有相邻的战舰)。表示甲板,其中,每个单元格可以是一艘战舰。时间复杂度: O(NM)空间复杂度:O(1)换句话说,战舰只能按。只能水平或者垂直放置在。列)的形状建造,其中。原创 2024-06-11 09:12:14 · 156 阅读 · 0 评论 -
树状数组+离散化,LeetCode 3072. 将元素分配到两个数组中 II
我们只需要能够实现快速查询arr1和arr2内大于给定数字的数字个数即可。Python可以直接使用有序列表SortedList。时间复杂度: O(NlogN) 空间复杂度:O(N)考虑线段树、树状数组、莫队……的所有元素分配到两个数组。在第一次操作中,将。这里使用两个树状数组维护。原创 2024-06-05 14:22:43 · 229 阅读 · 0 评论 -
分类讨论,2981. 找出出现至少三次的最长特殊子字符串 I
如果a[0] == a[1],那么可以从二者中拆出来三个a[0] -1。如果a[0] > a[1],那么可以从二者中拆出来三个a[1] - 1。如果a[0] > 2,那么可以从a[0]中拆出来3个a[0] - 2。当然可以从a[0], a[1], a[2]中拆出三个a[2]的长度,如果不存在出现至少三次的特殊子字符串,则返回。时间复杂度: O(nlogn)空间复杂度:O(nU)如果一个字符串仅由单一字符组成,那么它被称为。不是特殊字符串,而字符串。是字符串中的一个连续。原创 2024-05-29 23:30:19 · 271 阅读 · 0 评论 -
数学加构造,LeetCode 2028. 找出缺失的观测数据
简单的构造题原创 2024-05-27 10:33:16 · 426 阅读 · 0 评论 -
二维前缀异或和,1738. 找出第 K 大的异或坐标值
时间复杂度: O(mnlog(mn))空间复杂度:O(mnlog(mn))计算二维前缀异或和,然后把所有值排序,取第k大即可。原创 2024-05-26 09:10:08 · 200 阅读 · 0 评论 -
两种做法单调栈/线段树,LeetCode 1673. 找出最具竞争力的子序列
两种方法都挺好的原创 2024-05-24 16:10:28 · 257 阅读 · 0 评论 -
思维+滑动窗口,LeetCode 2831. 找出最长等值子数组
那就变成了在每个元素的下标数组中跑滑动窗口,双指针l,r满足id[r] - id[l] - (r - l) <= k,即元素出现的左右边界长度减去元素个数不能超过k。或者我们可以将每个元素出现下标存到数组里,然后在每个元素的下标数组中找最长连续子序列。如果没有最多删除k这个选项,我们在数组中找最长等值数组,双指针遍历一遍即可。如果子数组中所有元素都相等,则认为子数组是一个。个元素后,返回可能的最长等值子数组的长度。时间复杂度:O(N) 空间复杂度:O(N)是数组中一个连续且可能为空的元素序列。原创 2024-05-23 11:41:25 · 460 阅读 · 0 评论 -
哈希加排序,LeetCode 2225. 找出输掉零场或一场比赛的玩家
水水水原创 2024-05-22 14:53:38 · 215 阅读 · 0 评论 -
前缀和+位运算,LeetCode 1542. 找出最长的超赞子字符串
联想回文串特点结合按位拆分原创 2024-05-20 19:33:53 · 410 阅读 · 0 评论 -
一次遍历,LeetCode 1535. 找出数组游戏的赢家
一次遍历原创 2024-05-19 09:36:18 · 324 阅读 · 0 评论 -
经典贪心,826. 安排工作以达到最大收益
很经典的一道板子题原创 2024-05-17 08:55:26 · 290 阅读 · 0 评论 -
区间选点问题,LeetCode 2589. 完成所有任务的最少时间
区间贪心经典问题原创 2024-05-15 18:02:34 · 428 阅读 · 0 评论 -
贪心+数学
贪心原创 2024-05-14 15:50:43 · 272 阅读 · 0 评论 -
多源bfs,LeetCode 994. 腐烂的橘子
多源bfs板子题原创 2024-05-13 11:28:34 · 288 阅读 · 0 评论 -
贪心+记忆化搜索,1553. 吃掉 N 个橘子的最少天数
不错的贪心题原创 2024-05-12 08:54:58 · 226 阅读 · 0 评论 -
一次遍历,LeetCode 2391. 收集垃圾的最少总时间
调休了呀原创 2024-05-11 08:56:51 · 330 阅读 · 0 评论 -
三维dp,LeetCode 1463. 摘樱桃 II
三维dp原创 2024-05-07 09:26:30 · 474 阅读 · 0 评论 -
三维dp,LeetCode 741. 摘樱桃
NOIP经典题目原创 2024-05-06 11:37:23 · 458 阅读 · 0 评论 -
滑动窗口,LeetCode 1652. 拆炸弹
滑动窗口原创 2024-05-05 10:17:38 · 356 阅读 · 2 评论 -
二分优化dp,LeetCode 1235. Maximum Profit in Job Scheduling
二分优化dp问题原创 2024-05-04 10:20:53 · 364 阅读 · 0 评论 -
排序 + 模拟,LeetCode 1329. 将矩阵按对角线排序
拿出来排序再放回去原创 2024-04-29 10:11:31 · 418 阅读 · 0 评论 -
位运算,两种思路,LeetCode 1017. 负二进制转换
时间复杂度: O(logn) 空间复杂度:O(1)加入余数,原数 -= 余数,原数除以 base。,以二进制字符串的形式返回该整数的。,否则返回的字符串中不能含有前导零。原创 2024-04-28 08:44:10 · 184 阅读 · 0 评论 -
二分查找,1146. 快照数组
下班~原创 2024-04-26 09:01:30 · 282 阅读 · 0 评论 -
树形dp,LeetCode 2385. 感染二叉树需要的总时间
树形dp原创 2024-04-24 09:32:50 · 470 阅读 · 0 评论 -
滑动窗口,LeetCode 1052. 爱生气的书店老板
滑动窗口原创 2024-04-23 08:21:31 · 394 阅读 · 0 评论 -
递推入门,LeetCode 377. 组合总和 Ⅳ
递推入门原创 2024-04-22 23:25:11 · 351 阅读 · 0 评论 -
搜索+剪枝,LeetCode 216. 组合总和 III
搜索入门原创 2024-04-21 18:31:04 · 509 阅读 · 0 评论 -
dfs+剪枝,LeetCode 39. 组合总和
如何用完全背包剪枝原创 2024-04-20 23:31:17 · 478 阅读 · 1 评论 -
二维dp,O(1)转移,1883. 准时抵达会议现场的最小跳过休息次数
简单dp原创 2024-04-19 09:22:08 · 388 阅读 · 0 评论 -
哈希,LeetCode 2007. 从双倍数组中还原原数组
O(n)解法原创 2024-04-18 13:54:42 · 375 阅读 · 0 评论