自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(468)
  • 收藏
  • 关注

原创 LeetCode每日一题(1416. Restore The Array)

如果 dp[i][prev]是我们遍历到 s[i]且当前累积的数字是 prev 的情况, 那 dp[i][prev] = dp[i+1]prev _ 10 + s[i]] + dp[i+1]s[i]], 如果 prev _ 10 + s[i] > k 那说明我们只能把 s[i]作为新数字的开头, 所以 dp[i][prev] = dp[i+1]s[i]]遍历 s, 对于每个 s[i], 我们要么让它作为新数字的开头, 要么让它作为前面累积数字的结尾。

2023-04-23 15:03:50 614 1

原创 LeetCode每日一题(2561. Rearranging Fruits)

至于要交换的数字, 我们可以分别统计出 basket1 与 basket2 中数字的出现频次 freqs1 与 freqs2, 对于任何一个数字 n, 如果 freqs1[n] == freqs2[n]则不用进行交换, 如果(freqs1[n] + freqs2[n]) % 2 == 1, 则证明无法通过交换来实现两个篮子相等。swaps.len() / 2])每次交换的成本如果是直接交换的话就是 min(basket1[i], basket2[j])或者 2 * min(basket1[…

2023-04-22 11:33:25 547

原创 LeetCode每日一题(2589. Minimum Time to Complete All Tasks)

2001], 这样我们就可以记录哪些时间片已经占用了, 而这些时间片如果处于 tasks[i][0]与 tasks[i][1]之间, 那证明 tasks[i]已经处理过一部分了, 需要用 tasks[i][2]减去这些时间片, 剩下的才是需要花费的时间, 注意, 最后剩余的时间可能0, 我们则需要利用那些距离 tasks[i][1]最近的且没有被占用的时间片来完成 task[i]

2023-04-19 20:51:38 475

原创 LeetCode每日一题(2528. Maximize the Minimum Powered City)

通过 binary search 来查找最终结果, 提示里说检查的方法用到了 Line Sweep, 查了一下, 还是没看出来这里怎么用 Line Sweep, 我觉得更像是 Sliding Window。检查时如果某个城市的电量达不到目标值, 那我们就需要建电站,所建的位置应该是当前位置+辐射半径, 因为前面遍历过的城市的电量一定是可以达到目标值的, 所以给他们增加电量并不会给带来额外的好处。但是后面的城市可能会出现电力不足的情况, 所以我们应该向后建,并保证当前位置是其辐射范围的最左侧即可。

2023-04-18 15:37:20 358

原创 LeetCode每日一题(1639. Number of Ways to Form a Target String Given a Dictionary)

我们把 words 想象成一个 matrix, 假设 freqs_in_col[col][char]是 words 的每一列每一个字符的出现频率, dp[i][j]是用 words[…]的路径数量, dp[i][j] = dp[i][j + 1] + freqs_in_col[j]target[i]] _ dp[i+1][j+1]。freqs_in_col[j]target[i]] _ dp[i+1][j+1]是指的从第 j 列中取与 target[i]相同的字符的路径数量。

2023-04-16 10:20:20 232

原创 LeetCode每日一题(2218. Maximum Value of K Coins From Piles)

假设 dp[i][k]是当我们取到 piles[i]时还剩下 k 次机会所能拿到的最大值, dp[i][k] = max(这里要注意一点是当前 pile 我们可以不取硬币直接跳过。

2023-04-15 11:27:14 384

原创 LeetCode每日一题(2499. Minimum Total Cost to Make Arrays Unequal)

我们要交换的位置 i 一定是 nums1[i] == nums2[i], 把这些要交换数字的总数和频次统计出来, 如果, 最大出现频次 _ 2 总数, 我们就要从外面那些 nums1[i]!= num2[i]的位置拉一部分进来进行交换才有可能实现。在这里, 大家有兴趣的去看吧。

2023-04-14 14:19:11 387

原创 LeetCode每日一题(2457. Minimum Addition to Make Integer Beautiful)

对于 n 中的任意一位数字 n[i], 要想通过加法使当前位变小, 而且成本最低, 一定是加到 10, 使 n[i] = 0 并且 n[i-1] += 1, 也就是向前进一位, 要想实现进位, 当前位要加的数字就是 10 - n[i], 也就是 n[i]的 10 进制的补位, 实际这样的操作对于单个数字的加和的减少量是 10 - n[i] - 1, 之所以要减 1 是因为我们有一个进位操作, 下一位增加了 1, 最后将这些补位组合起来就是最终要加的数字。

2023-04-13 10:38:39 213

原创 LeetCode每日一题(2449. Minimum Number of Operations to Make Arrays Similar)

【代码】LeetCode每日一题(2449. Minimum Number of Operations to Make Arrays Similar)

2023-04-12 14:15:41 444 1

原创 LeetCode每日一题(2390. Removing Stars From a String)

用一个 max heap 来保存已遍历过的非*字符的位置, 遍历时如果遇到*字符就从 max heap 中取出一个字符,将两个字符同时消除掉, 如果 max heap 为空则无法消除。

2023-04-11 09:38:14 312

原创 LeetCode每日一题(2384. Largest Palindromic Number)

回文侧面选好了, 剩下的就是选择回文中心,还是从 9 到 0 来遍历, 如果该数字的原计数 mod 2 等于 1, 我们就可以拿它当回文中心, 因为中心只有一个, 所以选择完成后就不用再继续遍历下去了。这里会遇到一种特殊情况, 就是只有 0,且 0 的计数为偶数, 这样的话无论是选侧面还是选中心, 0 都不会被选上, 返回的答案会是空字符串, 我们需要对这种情况进行检查,并且直接返回"0"作为答案。我们只需要建立回文的一侧即可, 另一侧将建立好的字符串反向拼接上就好。

2023-04-10 10:13:16 344

原创 LeetCode每日一题(1857. Largest Color Value in a Directed Graph)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RI8Gsdor-1681017337782)(null)]提示基本把解这题的关键点都说清楚了, 按提示中的方式来写即可。

2023-04-09 13:16:10 545

原创 LeetCode每日一题(2448. Minimum Cost to Make Array Equal)

cost[i-1]), 用人话说就是要都变成 nums[i]就要在都变成 nums[i-1]的基础上在加上两者的差值与 cost prefix sum 的乘积。此时我们还是只考虑 2 变 3 的情况, cost[1] = 14, 所以 2 变成 3 的成本就是 14, 但是前面还有个 1, 此时 1 已经变成 2 了,也是从 2 变成 3, 但是成本不一样, cost[0] = 2, 所以都变成 3 的成本就是 2 + 14 = 16, 加上前面 1 变成 2 的成本, total_cost = 18。

2023-04-08 11:31:17 458

原创 LeetCode每日一题(2207. Maximize Number of Subsequences in a String)

如果我们选择插入 pattern[0], 那我们最终会未答案贡献 text 中 pattern[1]的数量, 比如 text = “cabbd”, pattern = “ab”, 此时我们如果插入 a, text = “acabbd”, 因为 text 中有 2 个 b, 所以我们插入的这个 a 可以生成 2 个 ab, 同理, 如果我们选择 append pattern[1], text = “cabbdb”, text 中只有 1 个 a, 所以我们新添加的这个 b 只能生成一个 ab。

2023-04-07 11:50:03 254

原创 LeetCode每日一题(2439. Minimize Maximum of Array)

如果 nums[i] < avg 则证明我们需要从之前遍历的数字中拿一部分来补充 nums[i]与 avg 之间的差值, 这样会违反规则, 所以我们无法做到, 此时的答案不会有任何变化,与遍历 nums[i-1]的时候一样。此时应得到[4, 4, 3], 但是规则限制数字只能从右向左流动, 我们要想从[5, 5, 1]转化成[4, 4, 3], 需要对左侧的数字做减法, 对右侧的数字做加法, 这样是违反规则的, 所以我们得不到[4, 4, 3], 仍然是[5, 5, 1]所以此时实际上得到[5, 5]

2023-04-05 12:18:44 558

原创 LeetCode每日一题(2405. Optimal Partition of String)

基本谜底就在谜面上, 遍历字符串并同时维护一个 hashset 代表前面已经经历过的字符, 如果当前字符存在于 hashset 当中, 证明有重复的字符了, 我们要把前面的作为一个独立的 partition, 然后清空 hashset, 继续遍历。跟昨天的题很类似, 差不多的题, 不同的表述方式, 难度截然不同。

2023-04-04 11:37:36 184

原创 LeetCode每日一题(2350. Shortest Impossible Sequence of Rolls)

如果 rolls[…i]包括所有数字, 那我们就可以从中挑出所有长度为 1 的组合, 再进一步, 如果 rolls[i…j]也包括所有数字,那我们就可以从 rolls[…j]中可以挑出所有长度为 2 的组合, 以此类推如果 rolls[j…k]也包括所有数字, 那我们就可以从 rolls[…k]中挑出所有长度为 3 的组合。我们要做的就是找到尽可能小的 i,j,k。

2023-04-03 20:54:01 225

原创 LeetCode每日一题(2366. Minimum Replacements to Sort the Array)

假设 prev 是上一步得出的最小值, 也就是需要将当前数字拆分成小于或等于 prev 的数字, num_of_pieces = (nums[i] / prev) + 1, 这里 num_of_pieces 就是要将当前数字拆分成不大于 prev 的数字时所能拆分的最少份数, 如果 nums[i]能被 prev 整除, 那末尾的+1 就要去掉, 然后我们将 nums[i] / num_of_pieces 就可以得到拆分成 num_of_pieces 份后最大化的最小值。i]检查处理一遍, 会非常耗时。

2023-04-02 09:38:55 439

原创 LeetCode每日一题(2234. Maximum Total Beauty of the Gardens)

假设 dp[n][i]是剩余 n 株花时 flowers[i…]所能拿到的最大的 total beauty, 那 dp[n][i] = max(dp[n - (target - flowers[i])][i+1] + full, max_minimum(i)), 其中 dp[n-(target - flowers[i])][i+1] + full 是 flowers[i]补齐为 target 后所能拿到的最大收益, max_minumum(i)是将剩余的 flower 都栽种到 flowers[i…

2023-04-01 16:37:18 340

原创 LeetCode每日一题(1444. Number of Ways of Cutting a Pizza)

但是不是每个位置我们都可以下刀的, 我们需要检查切下来拿去分的部分(上半部分或者左半部分)上是不是有苹果, 而且还要保证剩下的部分能够分。检查拿去分的部分上面是否有苹果, 我们借助二维的 prefix sum 可以解决。水平切的方法数量为, horizontal = sum(dp[r][left]), 对于任意 left < c

2023-03-31 14:26:27 143

原创 LeetCode每日一题(87. Scramble String)

两个人无论怎么拿都影响不到对方的结果, 甚至连自己的结果也影响不了, 所以根本没有什么策略, 就是简单的对能拿的卡片进行计数。能拿的卡片就是, 连续 n 张卡片, n > 2, 所能拿取的数量就是 n - 2, 因为 Alice 先拿取, 所以 Alice 所能拿取的卡片数量必须得大于 Bob 能拿取的数量,Alice 才能赢。

2023-03-30 18:16:36 111

原创 LeetCode每日一题(2038. Remove Colored Pieces if Both Neighbors are the Same Color)

两个人无论怎么拿都影响不到对方的结果, 甚至连自己的结果也影响不了, 所以根本没有什么策略, 就是简单的对能拿的卡片进行计数。能拿的卡片就是, 连续 n 张卡片, n > 2, 所能拿取的数量就是 n - 2, 因为 Alice 先拿取, 所以 Alice 所能拿取的卡片数量必须得大于 Bob 能拿取的数量,Alice 才能赢。

2023-03-29 14:14:47 255

原创 LeetCode每日一题(2170. Minimum Operations to Make the Array Alternating)

我们分别找出奇数位与偶数位数字的出现频次,假设我们奇数位 1 的出现频次最高,偶数位 2 的出现频次最高,我们只要让奇数位其他不是 1 的数字变成 1 和偶数位不是 2 的数字变成 2 即可得到 alternating 数组, 并且整个变换过程的步骤也是最少的。但是我们要注意奇数位只有一个数字或者偶数位只有一个数字的情况, 这种情况下,如果奇数位只有一个数字,那我们只能去找下一个频次最高的偶数位, 如果偶数位为一个数字,那我们只能去找下一个频次最高的奇数位。

2023-03-28 13:25:48 601

原创 LeetCode每日一题(2132. Stamping the Grid)

【代码】LeetCode每日一题(2132. Stamping the Grid)

2023-03-26 12:06:12 155

原创 LeetCode每日一题(1526. Minimum Number of Increments on Subarrays to Form a Target Array)

在上升沿开始的时候设置一个基准值, 上升时我们将每个当前值与上一个值的差值纳入到答案中。下降时如果当前值在基准值之上, 我们不做任何处理, 因为当前的高度值已经在上升沿的时候计过一次了。只有当前值低于基准值的时候, 我们才会把基准值与当前值的差值计入答案, 同时我们把基准值调整到与当前值相同。最后答案还需要加上结束时的基准值, 这实际就是把基准值以下的值都作为一个 subarray 来进行处理。

2023-03-25 10:28:53 37

原创 LeetCode每日一题(1466. Reorder Routes to Make All Paths Lead to the City Zero)

我们从 0 出发,bfs 遍历整棵树, 每个 edge 一定是有一条路跟它对应的, 但是路的方向可能不是朝向 0 的方向, 因为我们是从 0 出发的, 所以我们一路上遍历的路如果是跟我们的遍历方向相反的, 那说明这条路的方向是正确的, 如果与我们遍历的方向相同则需要调整方向。这题以前做过, 但是这次用以前的代码提交报超时了, 应该是添加了新的测试。

2023-03-24 17:27:09 284

原创 LeetCode每日一题(2126. Destroying Asteroids)

将 asteroids 排序, 然后从小到大碰过去就好了。

2023-03-23 20:15:51 92

原创 LeetCode每日一题(2492. Minimum Score of a Path Between Two Cities)

写到这我突然想到, 如果用 union-find 的方法找所有与 1 在同一个 component 中的 node, 找的过程中同时把最小的 distance 找出来,这样也是可以解出来的。可能时间复杂度还会低一点。有兴趣的同学可以实现一下。先说目前的解法, 从 1 开始 bfs 遍历整个与 1 相连的 component, 找出其中所有 path 中 distance 的最小值。

2023-03-22 19:27:21 156

原创 LeetCode每日一题(2071. Maximum Number of Tasks You Can Assign)

我们首先取出 tasks 中最大的, 即 tasks[k-1], 然后正序查找 workers 中是否有能不吃药就可以完成的, 如果有, 则将 worker 移除, 如果没有则正序查找 workers 看是否有能吃药完成该任务的, 如果有则将 worker 移除。假设 tasks 和 workers 都是正序排列的, 且我们最多可以完成 k 个任务, 那我们一定完成的是 tasks[…k], 而这 k 个工人一定是 workers[workers.len() - k…

2023-03-21 21:37:36 283

原创 LeetCode每日一题(2030. Smallest K-Length Subsequence With Occurrences of a Letter)

用一个 monostack 保存当前被选中的字符, 遍历 s, 如果当前字符 s[i] < monostack[-1], 则持续把 monostack[-1]弹出, 直到 monostack[-1]

2023-03-20 17:59:33 205

原创 LeetCode每日一题(1775. Equal Sum Arrays With Minimum Number of Operations)

nums1 中的 2 和 nums2 中的 5: 贡献是 1, 即 nums1 中的 2 可以变成 1, nums2 中的 5 可以变成 6。nums2 中的 2 和 nums1 中的 5: 贡献是 1, 即 nums1 中的 2 可以变成 1, nums2 中的 5 可以变成 6。nums1 中的 5 和 nums2 中的 2: 贡献是 4。nums1 中的 6 和 nums2 中的 1: 贡献是 5。nums2 中的 6 和 nums1 中的 1: 贡献是 5。

2023-03-17 10:24:24 320

原创 LeetCode每日一题(1585. Check If String Is Transformable With Substring Sort Operations)

能不能向左移动的检查我们解决了, 然后就是第二件事, 因为我们把这些数字从 s 中移动到正确的位置相当于把这些数字删除了, 所以 prev_counts 在整个过程中不是固定的, 我们每移动完一个数字, 理论上我们需要变更 prev_counts 以使其能正确的映射当前剩余数字的情况, 但因为我们计的是前面出现的数字数量, 理论上我们每移动完一个数字需要把该数字之后的所有计数都修改掉。首先, 一个数字要想向左移动, 那它左侧的数字一定是要大于它的, 如果中途出现了比它小的数字, 那它一定移动不到目标位置。

2023-03-16 16:41:46 36

原创 LeetCode每日一题(1975. Maximum Matrix Sum)

如果有奇数个负数, 最终会剩余一个负数,但是因为我们可以自由移动负号, 我们可以把负号移动到绝对值最小的数上以获取最大的加和。这个题换个说法,其实就是, 我们可以任意的移动负号(-), 当 2 个负号凑到一起可以消除。如果有偶数个负数, 我们可以把它们都变成正数。

2023-03-15 09:41:55 185

原创 LeetCode每日一题(1703. Minimum Adjacent Swaps for K Consecutive Ones)

两个元素之间的距离很容易算,比如[0, 3, 5]中 0 到 3 的距离就是 3 - 0 = 3, 也就是将 0 移动到 3 的位置需要 3 步, 但是我们不需要将 0 移动到 3, 我们只需要将 0 移动到 2 就可以了。这时候我们用一个长度等于 k 的 sliding window 来遍历 one_positions, 会得到 3 个 window, [0, 3, 5], [3, 5, 7]和[5, 7, 8][0, 3, 5] 最终移动成 [2, 3, 4] 一共用了 3 步。0 到 5 => 5。

2023-03-14 18:12:39 239

原创 LeetCode每日一题(1509. Minimum Difference Between Largest and Smallest Value in Three Moves)

将 nums 排序, 然后用 dp 来算每一步移除 nums 中最大值或者最小值, 三步之后的 nums 中的最大值和最小值的差。如果剩余 0 个, 则证明 nums 原有的数字数量

2023-03-12 08:44:07 86

原创 LeetCode每日一题(1388. Pizza With 3n Slices)

如果我们先忽略 circle array 的问题, 实际这题就是在一个 slice 中选出 slice.len() / 3 个不相邻的元素, 并且这些元素的加和值最大的问题。而加上 circle array 的条件之后, 不仅数组中相邻的两个元素成为互斥的, 数组的第一个和最后一个元素也成为互斥的,但是情况其实没有复杂多少,无非就是在原有的基础之上又分成了选择第一个元素和选择最后一个元素两种情况。时间久了忘了了一干二净, 最后还是看别人的解析才回忆起来。

2023-03-11 11:04:15 462

原创 LeetCode每日一题(1090. Largest Values From Labels)

按 value 进行排序, 从大到小依次查看是不是可以纳入到答案中来, 同时维护一个 labels 的计数和一个整体纳入答案的元素数量。

2023-03-10 09:35:57 305

原创 LeetCode每日一题(1386. Cinema Seat Allocation)

但是要注意的是,reserved_seats 中的行不是全部的行, 也就是一些行不会有保留座位, 这些行每行都可以放 2 组。

2023-03-09 10:20:48 297

原创 LeetCode每日一题(757. Set Intersection Size At Least Two)

配合代码,能看明白,但是这题下次要是换个说法再出现在我面前,大概率还是做不出来。

2023-03-08 13:27:52 290

原创 LeetCode每日一题(2187. Minimum Time to Complete Trips)

确定时间的最大和最小范围, 然后用二分法进行查找。

2023-03-07 13:14:14 421

空空如也

空空如也

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

TA关注的人

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