- 博客(74)
- 收藏
- 关注
原创 每日算法-250605
给定一个放有字母和数字的数组,找到最长的子数组,且包含的字母和数字的个数相同。若存在多个最长子数组,返回最靠左的。由于题目要求“若存在多个最长子数组,返回最靠左的”,我们只在第一次遇到前缀和时记录索引,并且在。如果一个子数组中字母和数字的数量相同,那么这个子数组(转换后)的和就为。问题就变成了“找到和为0的最长连续子数组的长度”。的数量相等,那么这个子数组(转换后)的和就为。问题就变成了“找到和为0的最长连续子数组”。的最长连续子数组,并返回该子数组的长度。时才更新,这样自然保证了最靠左的特性。
2025-06-05 21:40:14
861
原创 每日算法-250604
这道题是“田忌赛马”策略的一个应用。题目的目标是找到一个长度至少为 2 的连续子数组,其和是。对应一个空的前缀和,其值为 0),我们预先在。为了处理子数组从索引 0 开始的情况 (即。我们可以使用一个哈希表。
2025-06-04 17:46:35
743
原创 每日算法-250527
虽然可以通过“总数对 - 好数对”来计算,但我们也可以直接统计“坏数对”。直接统计“坏数对”可能比较复杂,我们可以考虑其补集——“好数对”。那么,“好数对”的条件就变成了。的范围,所以计算时需要使用。我们可以遍历所有可能的。
2025-05-27 19:17:03
1021
原创 每日算法-250526
今天记录两道完成的算法题,分享一下解题思路和代码。设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。
2025-05-26 22:36:19
720
原创 每日算法-250523
的第一个数字必然落在 1-9 之间。因此,我们可以用一个大小为 10 的数组。这是第二次写这道题,写的还不错,基本上掌握了,就不再多说了,详细题解见。很久之前的一道题目了,现在再写已经算是掌握了,也不再多说了,详细题解见。的索引)出现的数字中,其首位数字分别是 1-9 的各有几个。的最后一个数字互质。
2025-05-23 17:33:32
851
原创 每日算法-250512
一个处理器完成其分配的任务的时间是它的冷却时间加上它处理的所有任务中最耗时的那个任务所需的时间。为了最小化这个最大完成时间,我们应该将最耗时的任务分配给冷却时间最短的处理器。具体来说,我们将冷却时间最短的处理器分配任务中耗时最长的 4 个,第二短的处理器分配次长的 4 个,以此类推。中最慢的 4 个任务中的一个配对。为了使该处理器完成时间最小,它完成的时间取决于它自身的冷却时间和它处理的 4 个任务中最慢的一个。注意:由于学生可以任意组队,我们不需要关心具体的成绩值,只要有足够的学生数量即可。
2025-05-12 17:34:11
1044
原创 每日算法-250510
的二进制表示中,最低位的那个 ‘1’ 以及它之后的所有 ‘0’ 组成的数。核心思想是:当遇到一只仓鼠时,如何放置食物桶才能最有效地利用这个桶。每次操作我们可以选择加上或减去一个2的幂。值已经包含了将这个最终的2的幂减到0的那次操作。或将其转化为更容易处理的形式(更接近2的幂)。值本身就是一个2的幂,对应题目中可以操作的数。我们的目标是用最少的食物桶喂饱所有仓鼠。这个问题可以通过分析数字的二进制表示,并采用。初始就是2的幂,循环不进入,直接返回。不是2的幂,进入循环,每执行一次。成为2的幂或0时,循环终止。
2025-05-10 17:58:59
1027
原创 每日算法-250507
这种贪心策略的核心在于,每当一个 ‘0’ 出现在活动的 ‘1’ 序列之后,并且这个 ‘0’ 之后还有 ‘1’(表明当前的 ‘1’ 序列尚未到达最终位置),或者这个 ‘0’ 本身就是字符串的末尾(所有 ‘1’ 都必须移动到它之后),那么所有这些活动的 ‘1’ 都必须进行一次操作。题目的操作定义为:选择一个 ‘1’ 并将其移动到字符串的“最右端”(可以理解为所有 ‘0’ 之后,与其他 ‘1’ 一起形成连续的 ‘1’ 块)。时,存在的那个邻居成为较小值,从而正确计算边界元素成为谷所需的操作数。
2025-05-07 18:13:59
1011
原创 每日算法-250427
优惠是“买二送一”,我们可以免费获得一组三个糖果中最便宜的那个。为了最大化优惠力度,我们应该让免费赠送的糖果尽可能昂贵。可以证明,这种配对方式(即排序后将相邻元素配对)可以得到最大的。为了使不同元素的数量尽可能多,我们希望相邻的元素尽可能不同。为了让总和最大化,我们应该尽可能地让每一对中的较小数。目标是经过操作后,数组中不同元素的数量最大化。个元素都能被分配到不同的值,那么最大不同数就是。直观地想,如果我们不这样配对,例如将。区间内的数,这个区间的大小是。个不同的数,只要可用的范围。
2025-04-27 22:26:27
882
原创 每日算法-250422
为了最大化我们获得的硬币数,我们应该确保在每次选择中,我们拿到的都是当前可选的三堆里第二大的那一堆。每次选择时,有三堆硬币:最大的一堆会被 Alice 拿走,最小的一堆会被 Bob 拿走,剩下的一堆(也就是第二大的)归我们。贪心策略是显而易见的:我们应该优先选择整个网格中数值最大的那些元素,但同时要遵守每行的提取数量限制。这是第二次写这道题了,写的还不错,就是在处理可以获得的糖果数时没有处理数据可能溢出的问题。,确保我们的索引大于 Bob 的索引,表示还有足够的堆可供分配。个元素,使得它们的总和最大。
2025-04-22 22:34:22
1016
原创 每日算法-250418
题目的核心要求是找到一个子序列,其元素和严格大于未包含在子序列中的元素和。附加条件是,在满足核心要求的子序列中,选择长度最小的;如果长度依然相同,选择元素总和最大的。个元素后,数组中剩余不同整数的最少数目。为了使得剩余的整数种类最少,我们应该优先移除那些出现次数最少的整数。这是一个典型的贪心策略。这是第二次做这道题,思路在之前的博客中有详细记录。的最长子序列,我们应该贪心地选择数值最小的元素。,在前缀和数组中进行二分查找,找到第一个大于。排序,然后计算其前缀和。,则满足条件的最长子序列长度即为。
2025-04-18 20:33:57
871
原创 每日算法-250416
贪心算法(Greedy Algorithm)是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。核心思想:在问题的每个决策点,都做出当前看起来最佳的选择。一旦做出选择,就不会撤销或改变。希望通过一系列局部最优解,能够最终达到全局最优解。特点:通常实现起来比较简单,时间复杂度较低。贪心策略并不保证能为所有问题找到绝对最优解,但对很多特定问题(如最小生成树、霍夫曼编码、部分背包问题等)非常有效。
2025-04-16 17:36:56
916
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅