算法
文章平均质量分 72
wangjun861205
这个作者很懒,什么都没留下…
展开
-
LeetCode每日一题(1388. Pizza With 3n Slices)
如果我们先忽略 circle array 的问题, 实际这题就是在一个 slice 中选出 slice.len() / 3 个不相邻的元素, 并且这些元素的加和值最大的问题。而加上 circle array 的条件之后, 不仅数组中相邻的两个元素成为互斥的, 数组的第一个和最后一个元素也成为互斥的,但是情况其实没有复杂多少,无非就是在原有的基础之上又分成了选择第一个元素和选择最后一个元素两种情况。时间久了忘了了一干二净, 最后还是看别人的解析才回忆起来。原创 2023-03-11 11:04:15 · 477 阅读 · 0 评论 -
LeetCode每日一题(1090. Largest Values From Labels)
按 value 进行排序, 从大到小依次查看是不是可以纳入到答案中来, 同时维护一个 labels 的计数和一个整体纳入答案的元素数量。原创 2023-03-10 09:35:57 · 330 阅读 · 0 评论 -
LeetCode每日一题(1386. Cinema Seat Allocation)
但是要注意的是,reserved_seats 中的行不是全部的行, 也就是一些行不会有保留座位, 这些行每行都可以放 2 组。原创 2023-03-09 10:20:48 · 315 阅读 · 0 评论 -
LeetCode每日一题(757. Set Intersection Size At Least Two)
配合代码,能看明白,但是这题下次要是换个说法再出现在我面前,大概率还是做不出来。原创 2023-03-08 13:27:52 · 302 阅读 · 0 评论 -
LeetCode每日一题(2187. Minimum Time to Complete Trips)
确定时间的最大和最小范围, 然后用二分法进行查找。原创 2023-03-07 13:14:14 · 434 阅读 · 0 评论 -
LeetCode每日一题(2444. Count Subarrays With Fixed Bounds)
只要 min_k原创 2023-03-04 11:32:37 · 526 阅读 · 0 评论 -
LeetCode每日一题(28. Find the Index of the First Occurrence in a String)
用 Rabin-Karp 算法。原创 2023-03-03 10:52:35 · 514 阅读 · 0 评论 -
LeetCode每日一题(1568. Minimum Number of Days to Disconnect Island)
想了半天, 让别人一句话给点醒了, 任何形状的陆地, 最多将 2 块地变成水就可以实现不联通的状态。我们只需要检查有没有变 0 或者 1 块就可以实现的情况就可以了。要注意的是全是水的情况也叫不连通。原创 2023-03-02 13:26:32 · 488 阅读 · 0 评论 -
LeetCode每日一题(1489. Find Critical and Pseudo-Critical Edges in Minimum Spanning Tree)
pseudo critical edge 的检查方法: 强制用该 edge 生成 mst, 如果生成的 mst 的 weight == min_weight 则此 edge 为 pseudo critical edge。其实换种方法理解就是该 edge 一定至少出现在一个 weight == min_weight 的 mst 中。用所有的 edges 建立 mst, 此时 mst 的 weight 我们记做 min_weight, 因为此时我们生成的 mst 的 weight 一定是最小的。原创 2023-03-01 20:18:19 · 149 阅读 · 0 评论 -
LeetCode每日一题(1363. Largest Multiple of Three)
由于%3 的操作的结果无非是 0、1 或者 2, 0 的情况我们不用考虑, 因为它对接下来的求余运算没有影响, 我们来看一下 1 和 2 的情况, 1 在下一步的时候会变成 10(remain*10), 10 % 3 依然是 1, 2 在下一步的时候会变成 20, 20 % 3 还是 2, 也就是说即使我们不把 remain 乘以 10, 对于后续的运算也是没有影响的。也不是, 因为我们还可以通过移除 2 个%3 == 2 的 digit 来解决这一情况, 因为(2 + 2) % 3 == 1。原创 2023-02-28 12:04:05 · 251 阅读 · 0 评论 -
LeetCode每日一题(632. Smallest Range Covering Elements from K Lists)
用一个 min heap 来维护最终答案中所有的数字, 每次从 heap 中 pop 出最小值, 将该数字所在 list 中的下一个数字 push 进 heap 中, 此时 range 中的最小值是 heap 中 top 的值, 最大值有可能是刚刚 push 进去的那个值, 我们只需要用原有的最大值与该值进行比较即可。整体来说是用 merge sort 的方式。原创 2023-02-27 10:04:02 · 348 阅读 · 0 评论 -
LeetCode每日一题(72. Edit Distance)
最终, 如果 i 先到达 word1 尾部, 则证明我们需要往 word1 尾部插入 word2 的剩余字符, 如果 j 先到达 word2 的尾部, 则证明我们需要删除 word1 的剩余字符。原创 2023-02-26 10:25:30 · 447 阅读 · 0 评论 -
LeetCode每日一题(2193. Minimum Number of Moves to Make Palindrome)
用双指针法, 至于为什么这种方法会奏效, 请看。原创 2023-02-25 14:21:50 · 395 阅读 · 0 评论 -
LeetCode每日一题(765. Couples Holding Hands)
我们把 2 把椅子看做是一个 node, 如果 node_i 与 node_j 中的情侣有换位置的需求, 那我们认为 node_i 与 node_j 之间有 1 条 edge, 这样我们就可以得到一个 graph, 这里的重点是, 只要有换位置的需求,那这些需要换位置的 nodes 和与其相关的 edges 一定会组成 1 个或多个环, 因为一个 node 最多有 2 条 edge, 所以任何一个 node 都不可能同时处于 2 个环中。原创 2023-02-24 17:23:28 · 301 阅读 · 0 评论 -
LeetCode每日一题(857. Minimum Cost to Hire K Workers)
我们定义 ratio = wage / quality, 它代表工所能接受的单位 quality 所付 wage 的下限, 我们将工人按 ratio 排序, 这样我们遍历工人的时候 ratio 是非严格递增的(可能存在 ratio 相等的情况), 因为 ratio 是个下限, 所以我们选中的工人一定是按照最后一个进来的工人的 ratio 来计算工资, 高于这个 ratio 我们赔钱, 低于这个 ratio 至少最后进来的那个工人不干。从这些值中挑出最小的就是我们要的答案。原创 2023-02-23 21:57:15 · 357 阅读 · 0 评论 -
LeetCode每日一题(1632. Rank Transform of a Matrix)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GZDeCS8y-1677080795564)(null)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CdFe2Wnr-1677080797518)(null)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JORDYrOV-1677080795386)(null)]原创 2023-02-22 23:48:40 · 98 阅读 · 0 评论 -
LeetCode每日一题(850. Rectangle Area II)
我们将整个题想象成一个扫描过程, 从下向上扫描, 每次扫描的高度取决于 rectangles 中出现的所有 y 值, 将这些 y 值排序, 相邻两个 y 值之间的差值就是每次的扫描高度。我们将每个正方形的上下边视作两种不同的事件, 下边为开始, 上边为结束, 当下边进入扫描范围之后, 当前正方形的左右两个边(x_start, x_end), 开始影响结果, 当上边离开扫描范围之后, 当前正方形的左右两个边(x_start, x_end), 结束对结果的影响。原创 2023-02-21 14:57:07 · 117 阅读 · 0 评论 -
LeetCode每日一题(715. Range Module)
这一点开始被我忽略了, 后来测试总是通不过, 费了半天劲才发现是这里的问题。remove_range 时基本与 add_range 相同, 但是要注意一点, 更新当前节点 is_tracked 的时候不用考虑子节点的 is_tracked, 只要参数范围与当前节点的范围有交集, 那当前节点的 is_tracked 就一定是 false, 因为有任何一个子节点是 untracked 的, 那当前节点就是 untracked 的, 题目里对此有交代。原创 2023-02-19 16:18:27 · 350 阅读 · 0 评论 -
LeetCode每日一题(699. Falling Squares)
用 coordinate compression 和 segment tree 来解。原创 2023-02-18 11:01:31 · 657 阅读 · 0 评论 -
LeetCode每日一题(493. Reverse Pairs)
这里面重点是 g(i, m, j), 因为在 nums[m+1…=j]中的数字一定是在 nums[i…=m]之后的, 所以我们只需要遍历 nums[i…=m], 然后在 nums[m+1…=j]中找到小于它的二分之一的数字即可。因为这里面不存在顺序问题, 所以两个数组都可以按数字值来进行排序, 然后用 merge-sort 的方式来统计 reverse pair 的数量。=j]的 reverse paris 的数量。g(i, m, j)是 nums[i…=j]所存在的 reverse pairs 的数量。原创 2023-02-16 13:46:19 · 316 阅读 · 0 评论 -
LeetCode每日一题(1665. Minimum Initial Energy to Finish Tasks)
最后一步完成后所剩余的能量是完全浪费的, 所浪费的能量就是 tasks[i][1] - tasks[i][0], 所以为了初始值最小, 我们需要挑选这个差值最小的 task 作为最后一步, 如果存在最小差值相同的情况, 我们要挑选 tasks[i][1]最大的那个, 因为如果在完成倒数第二步之后所剩余的能量大于最后一步所需能量, 我们前面给初始能量增加的值有可能也是浪费的。单纯是自己想的, 不保证没有绕弯路。原创 2023-02-15 14:43:05 · 245 阅读 · 0 评论 -
LeetCode每日一题(1606. Find Servers That Handled Most Number of Requests)
然后再通过二分搜索法搜索目标 server number 即 index_of_request % k, 将找到的 server number 从 idle_servers 中移除, 然后将结束时间(start_time + load[index_of_request])和 server number 放到 busy_servers 中。用一个数组(idle_servers)来保存空闲的 server number, 其中的 server number 正序排列。原创 2023-02-14 11:23:00 · 325 阅读 · 0 评论 -
LeetCode每日一题(1028. Recover a Tree From Preorder Traversal)
先 left 后 right, 是不是当前节点的直接子节点通过 traversal 中的下一层的 depth 来判断。应该有更优雅的解决方法,但是我是真的想不出来了。原创 2023-02-13 21:33:14 · 367 阅读 · 0 评论 -
LeetCode每日一题(2477. Minimum Fuel Cost to Report to the Capital)
假设 dp(i)返回值是从所有的 node_i 的 descendent nodes 走到 node_i 的人数、车的数量、燃料消耗量, 人数是所有 node_i 的 child node, dp(child_node)所返回的人数的加和+1, 车的数量等于人数 / seats, 燃料消耗量等于 dp(child_node)所返回的燃料消耗量的加和+dp(child_node)所返回的所有车的数量的加和, 因为有多少辆车从 child node 走到当前 node 就要消耗多少单位的燃料。原创 2023-02-12 10:35:47 · 473 阅读 · 0 评论 -
LeetCode每日一题(1131. Maximum of Absolute Value Expression)
【代码】LeetCode每日一题(1131. Maximum of Absolute Value Expression)原创 2023-02-11 17:11:11 · 642 阅读 · 0 评论 -
LeetCode每日一题(1042. Flower Planting With No Adjacent)
遍历的过程中要注意,如果遇到下一层的 node 已被标号且标号与当前 node 的标号相同, 我们需要将下一层的 node 的标号+1, 但是该 node 不会放到下一层要遍历的 nodes 当中。之所以我们可以在遇到相邻且标号相同的 node 时简单的将相邻 node 的标号+1, 是因为一个 node 最多有 3 条路径, 假设遍历每条路径时都会遇到相同的情况, 该 node 的标号也就只会+3, 在%4 之后不会与之前 node 的标号重合。原创 2023-02-10 16:11:59 · 440 阅读 · 0 评论 -
LeetCode每日一题(2300. Successful Pairs of Spells and Potions)
spells 倒序排序, potions 正序排序, 取出一个 spell, 然后将所有与它的乘积小于 success 的 potion 都移出 potions, 此时 potions.len()就是该 spell 的答案。抽中了跟昨天基本一样的题。原创 2023-02-09 09:56:12 · 304 阅读 · 0 评论 -
LeetCode每日一题(2251. Number of Flowers in Full Bloom)
【代码】LeetCode每日一题(2251. Number of Flowers in Full Bloom)原创 2023-02-08 17:11:14 · 520 阅读 · 0 评论 -
LeetCode每日一题(60. Permutation Sequence)
第 n-th 位的取值应为(k / (n-1)!) + 1, 但是这(k / (n-1)!) + 1, 该数字可能已经在前面的位上使用过了, 所以我们要用一个 mask 来记录已用的数字, 实际我们要找的是第(k / (n-1)!) + 1 个未使用的数字。注意如果 k % (n-1) == 0, 我们就不需要+1, 直接找第 k / (n-1)!原创 2023-02-06 14:53:09 · 173 阅读 · 0 评论 -
LeetCode每日一题(440. K-th Smallest in Lexicographical Order)
在这, 大家自己看吧。基本能想到这种树状结构题就算是解开一半了, 另一半是相邻节点间步数的计算。原创 2023-02-05 09:56:19 · 92 阅读 · 0 评论 -
LeetCode每日一题(332. Reconstruct Itinerary)
我们根据 edges 可以得到每个 node 所需要到达的次数 stops, 然后从 JFK 出发,dfs 遍历整个 graph, 每走到一个 node, 我们将相应的 stops[node] -= 1, 在前往下一个 node 的时候我们将(source_node, destination_node)这个 edge 移出 edges。当 stops 中所有次数都为 0 时, 证明我们当前这条路径是可行的。原创 2023-02-04 11:05:14 · 422 阅读 · 0 评论 -
LeetCode每日一题(480. Sliding Window Median)
push 的过程简单来说就是,如果原创 2023-02-03 23:01:06 · 448 阅读 · 0 评论 -
LeetCode每日一题(664. Strange Printer)
dp[i][j]为 s[i…=j]的最小打印次数, i原创 2023-02-02 10:57:48 · 243 阅读 · 0 评论 -
LeetCode每日一题(1451. Rearrange Words in a Sentence)
rust 处理字符串的能力真的很让人不爽,有种相声演员报菜名,哪哪都挺流利, 就是说到某道菜就变结巴的感觉。长度不同按长度排, 长度相同按 index 排。原创 2023-02-01 11:35:35 · 315 阅读 · 0 评论 -
LeetCode每日一题(1630. Arithmetic Subarrays)
对每个 nums[l[i]…=r[i]]进行排序, 然后检查间隔是否一致即可。别想的太复杂了, 想的越多越做不出来。原创 2023-01-31 10:57:58 · 270 阅读 · 0 评论 -
LeetCode每日一题(460. LFU Cache)
最后 map.insert(key, (key, value, 1)), freqs[1].push((key, value, 1))如果 map[key]不存在, 但是 map.len()还没到 capacity 时, map.insert(key, (key, value, 1)), freqs[1].push((key, value, 1))如果 map[key]存在, 则按照 get()的方法更新 map 和 freqs 中的 frequency, 同时更新 value。原创 2023-01-30 13:52:56 · 232 阅读 · 0 评论 -
LeetCode每日一题(352. Data Stream as Disjoint Intervals)
维护一个数组 ranges 保存所有 range 并保证有序, add_num 的时候用 binary search 来搜索目标 range, 如果找到则更新,并检查是否需要和相邻 range 合并, 如果没有找到则插入新的 range。原创 2023-01-28 10:30:43 · 297 阅读 · 0 评论 -
LeetCode每日一题(472. Concatenated Words)
假设 dp[word]为 word 是否可以拆分为 2 个以上的 words 内包含的单词,对于任意一个 word, 用 i(0原创 2023-01-27 09:23:16 · 598 阅读 · 1 评论 -
LeetCode每日一题(798. Smallest Rotation with Highest Score)
假设 scores[i]为旋转 i 个 nums 后所能得到的 score。旋转的 num 个数从 0 到 nums.len() - 1。我们统计每个 num 对 scores[i]所做的贡献。原创 2023-01-26 21:03:44 · 816 阅读 · 0 评论 -
LeetCode每日一题(2359. Find Closest Node to Given Two Nodes)
分别计算从 node1 到每个 node 的最短距离 dist_set_1 和 node2 到每个 node 的最短距离 dist_set_2, dist_set_1[i]是从 node1 到 nodes[i]的最短距离, dist_set_2[i]是从 node2 到 nodes[i]的最短距离, 取 max(dist_set_1[i], dist_set_2[i])的最小值, 0原创 2023-01-25 10:15:17 · 1027 阅读 · 0 评论