
LeetCode
文章平均质量分 53
在人间负债^
商务合作/毕设指导加微:vx18706579002。阿里、腾讯云等多个社区专家博主、创作之星,华为云开发者社区认证博主,华为云-云享专家,鸿蒙开发者。 会点前后端开发、大数据开发、数据分析、测试、爬虫,喜欢分享,热爱写文章,享受解决BUG的快感。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 每日一题 ---- 【2207. 字符串中最多数目的子序列】
代码没有特判 a=b 的情况,要先更新答案,再更新 prea,这可以保证更新答案时 prea 表示的是当前字母左边的 a 的出现次数,prea 尚未计入当前字母。从题意中可以看出来,对于 pattern.charAt(0) 一定是插入到最左侧是最优解。对于 pattern.charAt(1) 一定是插入到最右侧是最优解。原创 2024-09-24 11:43:35 · 389 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【1014. 最佳观光组合】
枚举右端点 j,同时维护 j 左侧的最大值。:leftnum,那么最终结果就变成了。先对题目中的式子进行变形。原创 2024-09-23 11:45:19 · 400 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【826.安排工作以达到最大收益】
将 worker 从小到大排序,将 difficulty 和 profit 绑定,按 difficulty 从小到大排序,如果对于 worker[i] 能够完成的工作 worker[i++] 也肯定能够完成,因此对于 worker[i++] 的工人对于 difficulty 和 profit 只需要遍历 worker[i]原创 2024-05-17 09:20:13 · 281 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【2589.完成所有任务的最少时间】
例如排序后的区间为 [1,5],[3,7],[6,8],对于 [1,5] 来说,它右边的区间要么和它没有交集,例如 [6,8];要么交集是 [1,5] 的后缀,例如 [1,5]和 [3,7] 的交集是 [3,5],这是 [1,5] 的后缀(3,4,5 是 1,2,3,4,5 的后缀)。根据提示 2,尽量把新增的时间点安排在区间 [start,end] 的后缀上,这样下一个区间就能统计到更多已运行的时间点。排序后,对于区间 tasks[i] 来说,它右侧的任务区间要么和它没有交集,要么包含它的一部分后缀。原创 2024-05-15 09:00:19 · 292 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【2244.完成所有任务需要的最少轮数】
若为 1 则说明 还剩下一个,这种情况,我们可以考虑成最后剩余了 4 个,因此可以转化为 2 个 2 个 的处理,因此最后结果 +1 即可。每次处理优先消费 3 个,m % 3 后,剩余数量只能为 0,1,2。若为 0 则说明 3 个 3 个的处理刚好处理完。若为 2 则说明最后再进行一次 2 个处理即可。用哈希表统计每个等级出现的次数。原创 2024-05-14 08:51:21 · 269 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【994. 腐烂的橘子】
昨天没吃完的橘子今天就坏掉了可算是掉进橘子窝了题目提到了一个腐烂掉全部橘子所需要的最小分钟,其实只需要满足从上往下每一步都尽最大可能腐烂到所有橘子就可以满足答案的最小分钟一个多源BFS,第一步统计初始新鲜的橘子和腐烂的橘子,并将腐烂的橘子放入到队列 q 中,然后从 q 中取出腐烂的橘子,并向四个方向腐烂扩散,然后将新腐烂的橘子再放入到队列 q 中,直到 q 空,并且每次新腐烂橘子后前面维护的新鲜橘子的数量就减1,若最后新鲜橘子的数量不为0,则说明有的橘子不能被腐烂到,则返回 -1。时间复杂度:O(mn原创 2024-05-13 09:08:56 · 534 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【1553.吃掉 N 个橘子的最少天数】
前两天给树浇水,原来浇的是橘子树哇。今天直接来了个大的【困难】这个时间复杂度比较麻烦。原创 2024-05-13 08:49:14 · 233 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【2391.收集垃圾的最少总时间】
需要注意的点是,处理一个单位的一个垃圾需要1分钟,比如“MMM”,处理垃圾需要3分钟,这是一个坑点,需要注意。然后可以提前预处理假设全部单位需要处理全部垃圾,然后遍历的时候减去不需要处理的就可以了。n是garbage的长度,m是garbage[i]的长度之和。原创 2024-05-11 09:00:52 · 354 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【2960.统计已测试设备】
简单的模拟题,遍历数组,暴力的话就是两次遍历第一次从 0 到 n - 1,判断 batteryPercentages[i] 是否大于 0,若大于 0,则遍历 i + 1 到 n - 1,并将值 - 1。可以优化的是,维护一个变量存储后续值需要减少的值,这样就只需要遍历一遍数组就可以了。原创 2024-05-10 08:38:33 · 360 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【2105. 给植物浇水 II】
今天是给植物浇水II,昨天是I,本质上和昨天的没有区别,都是模拟,今天额外需要注意的就是需要用一下双指针,其实题目的描述就是双指针了,所以一般情况下都会用到。原创 2024-05-09 08:48:49 · 522 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【2079.给植物浇水】
模拟浇水和灌水的步骤就可以了,当剩余水大于等于需要浇的水,步数累加1即可,当剩余水小于需要浇的水,我们需要回到起点重新打满水,步数需要加上当前位置到起点的距离乘2(来回)原创 2024-05-08 09:25:33 · 427 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【1463.摘樱桃 II】
昨天是摘樱桃I,今天是II,与昨天的区别主要在于,今天的是两个人分别从左上角和右上角出发,且只能往下或右下和左下移动,求都移动到最后一排所能摘到樱桃的数量。商业转载请联系作者获得授权,非商业转载请注明出处。来源:力扣(LeetCode)原创 2024-05-07 09:10:29 · 508 阅读 · 5 评论 -
LeetCode 每日一题 ---- 【741.摘樱桃】
f[k][x1][x2]的最终结果是上述四种情况的最大值,然后再累加上grid[x1][k-x1]和grid[x2][k-x2]就可以得到最终该位置的答案。A往下,B往右:f[k][x1][x2] = f[k-1][x1-2][x2]A往右,B往下:f[k][x1][x2] = f[k-1][x1][x2-1]都往下:f[k][x1][x2] = f[k-1][x1-1][x2-1]都往右:f[k][x1][x2] = f[k-1][x1][x2]定义状态:f[k][x1][x2]原创 2024-05-06 09:22:28 · 563 阅读 · 2 评论 -
LeetCode 每日一题 ---- 【2798.满足目标工作时长的员工数目】
简单的遍历数组,判断元素是否满足条件。原创 2024-04-30 08:26:58 · 224 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【1329.将矩阵按对角线排序】
按每个对角线遍历,将得到的值放入数组中,然后对数组排序,再将数组中的元素再放回去就可以了。i - j + m,可以唯一的确定一条对角线,这样处理起来会方便很多。n,m 是矩阵的长和宽,矩阵对角线的最大长度是 min(n, m)原创 2024-04-29 09:11:57 · 485 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【1017.负二进制转换】
依据上面的逻辑,这个解题逻辑是可以推广到任意进制的,我们设进制为k,则我们我们辗转相除的时候,如果余数小于0,则余数- k(此时k是负数),商 + 1即可。我们平常做进制转换最常用的方法就是辗转相除法,下面的图示分别给出了普通的10进制转2进制的过程,和10进制转 -2进制的过程。当c == -1时,我们可以加2,转换为1,然后将辗转相除得到的b的值加1,然后继续做辗转相除的运算操作。这里我们来推导一下右边的计算过程的合规性。我们设 被除数为a,除数为b,余数为c。原创 2024-04-28 09:07:36 · 344 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【1146.快照数组】
第一次做到这种补充方法的题目,然后看到输入和输出用例的时候,愣了一下,这输入和输出用例有啥关联啊?后面发现,输入用例其实就是方法的调用顺序和调用次数,其实底层内部就是传给 main 方法的 arg 参数,然后调用对应的方法。:根据快照 id 获取指定快照中下标 index 的元素。:就是初始化方法,初始化的容器其实就是保存快照的容器。:生成一个快照,保存快照的 id,和快照内的元素。主要的时间复杂度就是二分的时间复杂度O(logn):将指定位置 index,设置为指定值 val。原创 2024-04-26 09:23:32 · 444 阅读 · 3 评论 -
LeetCode 每日一题 ---- 【2739.总行驶距离】
根据题意进行模拟,主邮箱每减少 5 升油,汽车就可以行驶 10 公里,同时副油箱需要向主油箱注入 1 升油,需要注意的是,副油箱中的油可能会出现不足的情况。原创 2024-04-25 08:45:02 · 381 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【2923. 找到冠军 I】
从头遍历一遍二维数组,如果发现 gird[x][y] == 1,说明 x 队赢过 y 队,下面我们就只需要子再判断一下是否有队伍赢过 y 队,如果没有赢过则更新答案为 y 队,如果有队伍赢过,我们就不更新答案,继续进行遍历。),遍历一遍二维数组 + 单行遍历。原创 2024-04-12 16:03:36 · 364 阅读 · 0 评论 -
LeetCode 每日一题 ---- 【1766. 互质树】
注意到,所有节点的节点值都不超过 50,我们可以枚举 [1,50] 中与 nums[x] 互质的数。由于要计算的是「最近」祖先,对于节点值相同的祖先,只需枚举深度最大的。设当前节点值为 val=nums[x],我们枚举 [1,50] 中与 val 互质的数字 j,计算出 valDepth[j] 的最大值,及其对应的节点编号,即为答案 ans[x]。最暴力的做法是,枚举 x 的所有祖先节点。但如果这棵树是一条链,枚举 x 的所有祖先节点需要 O(n) 的时间,每个点都这样枚举的话,总共需要 O(n。原创 2024-04-11 10:17:28 · 475 阅读 · 0 评论 -
代码随想录【数组】 ---- 二分查找
第一次二分查找 nums[mid] >= target 的左边界,第二次二分查找 nums[mid] num 的情况,说明后面的数也不可能满足情况了,就结束遍历即可。但是看答案,与上个题目的牛顿迭代法答案类似,或许直接背一个模板也可以吧。≤x 的最大 k 值,因此我们可以对 k 进行二分查找,从而得到答案。原创 2024-03-02 19:25:32 · 632 阅读 · 0 评论 -
面试经典 150 题 ---- 多数元素
长度为 n 的数组,最多会有 n 个不同的元素,但是题目保证数组中一定会有一个众数,所以至少会占用 n / 2 + 1 个数组,所以最多会有 n - ( n / 2 + 1 ) 个不同的数字,因此空间复杂度最多为 O( n - ( n / 2 + 1 ) )可以看到无论 n 为奇数还是偶数,又或者 众数是大数还是小数,对于 n / 2 的地方是一定会重合的,所以无论众数是多是返回下标为 n / 2 的值都是正确的。将数组中的元素按照单调递增或者单调递减的方式排序,那么下标为 n / 2 的元素一定是众数。原创 2024-02-29 16:53:11 · 583 阅读 · 0 评论 -
面试经典 150 题 ---- 买卖股票的最佳时机 II
贪心策略,我们可以考虑局部最优以达到整体最优,仅需要判断相邻两天之间的利润是否大于 0,若大于 0 则可以将答案加入到最终答案中,若小于 0 就遍历到下一天。仅需遍历一次数组即可。原创 2024-02-29 16:51:43 · 302 阅读 · 0 评论 -
面试经典 150 题 ---- 轮转数组
我可以将整个数组进行一次翻转,这样尾部的 k % n 个数组就会移动到头部,然后再分别翻转 [0, k % n - 1] 部分的数组和 [k % n, n - 1] 部分的数组就可以得到答案。我们将数组向右移动 k 个位置,那么数组尾部的 k % n 个元素就会移动到数组的头部,同样数组中其它元素就会向后移动 k % n 个位置。我们可以使用额外的数组来将每个元素放至正确的位置。用 n 表示数组的长度,我们遍历原数组,将原数组下标为。的位置,最后将新数组拷贝至原数组即可。的元素放至新数组下标为。原创 2024-02-28 15:36:19 · 517 阅读 · 0 评论 -
面试经典 150 题 ---- 删除排序数组中的重复项 II
指针表示为已经处理出的数组长度,表示为上上个应该被保留的元素。表示已经检查过的数组长度,原创 2024-01-29 19:22:50 · 323 阅读 · 0 评论 -
面试经典 150 题 ---- 删除排序数组中的重复项
指针表示下一个不同元素将要填入的下标位置,两个指针初始都指向 1。有是一个原地修改的题目,大概率依旧是双指针。表示遍历数组到达的下标位置,原创 2024-01-28 22:10:41 · 583 阅读 · 0 评论 -
面试经典 150 题 ---- 移除元素
方法一中,我们的两个指针都是从 0 开始的,实际上,我们可以一个指针从头开始,一个指针从尾开始,这样就最多仅需要遍历一次数组就可以了。题目要求在原数组的基础进行元素的删除,所以输出的数组长度一定小于原数组的长度,因此可以使用双指针,n 为数组的长度,最多只需要遍历该数组两遍。n 为数组的长度,最多只需要遍历该数组一遍。指针指向将要赋值的元素的位置。的值就是要输出的数组的长度。仅需要常数的空间保存若干变量。仅需要常数的空间保存若干变量。指针指向将要处理的元素,原创 2024-01-28 21:31:39 · 409 阅读 · 0 评论 -
面试经典 150 题 ---- 合并两个有序数组
将两个数组看作队列,每次从数组的头部取出一个比较小的值放到结果中。数组长度为 m + n,快排的时间复杂度为 O((m + n)log(m + n))数组长度为 m + n,快排的时间复杂度为 O((m + n)log(m + n))的前半部分就肯定会出现一个空位,从而保证全部元素都可以放进去且不会发生覆盖。指针单调移动,最多移动 m + n 次,因此时间复杂度为 O(m + n)指针单调移动,最多移动 m + n 次,因此时间复杂度为 O(m + n)的元素肯定不会被覆盖,如果是将。原创 2024-01-26 18:36:28 · 549 阅读 · 0 评论