398小L的元素修改问题 题目描述小 R 拿到了一个数组,她可以进行如下操作:使得一个元素加1,另一个元素减1。她希望最终数组的每个元素大小都在$ [l, r] $的范围内。小 R 想知道,最少需要多少次操作可以达到目标。 如果无法通过有限次操作使所有元素都落在指定范围内,则返回 -1。 解题思路为了使数组中的所有元素都落在区间 ([l, r]) 内,小 R 可以通过进行以下操作来调整数组: 统计调整需求: 遍历数组, 2025-01-29 #贪心 #稀土掘金
433数组元素最小操作次数问题 题解问题分析我们需要将数组中的所有元素通过一系列“除以 2 并向下取整”的操作变得相等。目标是找到最少的操作次数使得所有元素相等。 解题思路 记录每个数及其通过不断除以 2 后可能出现的值: 对于数组中的每个元素 x,记录它本身及其通过不断除以 2 后得到的所有可能值。 同时记录将 x 变成这些值所需的操作次数。 使用哈希表统计: 使用两个字典 cnt 和 d: cnt[x]:记录值 x 2025-01-27 #稀土掘金 #哈希表
448最大连续子数组和问题 题解问题描述给定一个整数数组,允许最多进行一次修改,将任意一个元素修改为任意给定的值 x。求经过修改后,能够得到的连续子数组的最大和。 解题思路一个比较经典的动态规划,需要注意的是题目要求的是必须恰好修改一次。 特殊情况处理: 当数组长度为 1 时,返回 x。 如果数组中所有元素都小于等于 0,返回数组中最大的元素和 x 中的较大者。 前缀和计算: 使用后缀数组 suf,其中 suf[i 2025-01-27 #动态规划 #贪心 #稀土掘金
412小S的子序列平均数之和 题目描述小 S 得到了一个由 n 个元素组成的数组,她想求出所有子序列的平均数之和。由于子序列的数量非常多,因此需要对结果取模 (10^9 + 7) 来避免结果过大。子序列是从原数组中选择部分元素,保持原数组的顺序形成的新数组。 你需要输出所有子序列的平均数之和对 (10^9 + 7) 取模的值。 可以证明,最终的答案一定是一个有理数 (\frac{a}{b}),对 (p) 取模的意义是在 ([0 2025-01-27 #组合数学 #稀土掘金
606画作 问题描述在一个充满色彩的艺术画廊里,小艾拥有 n 幅长度不一的画作,每幅画的长度都是从 1 到 n 的自然数。小艾的目标是将这些画作以特定的顺序摆放,并确保从入口处可以清晰地恰好看到 k 幅画作。判断某幅画是否可见的标准是:它左侧的画作中没有比它更高的遮挡物。 小艾想要计算出所有可能的摆放方式,以满足上述可见性条件。由于结果可能会非常庞大,需要将最终的答案对 10^9 + 7 进行取模后输出。 约 2025-01-25 #动态规划 #稀土掘金
602金银珠宝的数值 问题描述在一个神秘的竞技场中,勇敢的探险者小青拥有两个宝箱:一个宝箱里装满了 n 个金银珠宝的数值,另一个则是一个包含 m 个神秘符文的序列。小青面临着一个挑战:在接下来的 m 轮中,他必须在这两者之间做出明智的选择,以获得最高的财富。 在每一轮(第 i 轮)中,小青可以选择从宝箱的最上面或最下面取出一个珠宝 x。然后,他会将这个珠宝的价值乘以对应的符文 c[i],并把结果累加到他的总财富中。被取 2025-01-25 #记忆化搜索 #稀土掘金
600数组递增操作问题 问题描述在一个神秘的森林里,两个探险家,小智和小璇,面临着一项艰巨的任务。他们拥有两个魔法宝箱,分别装有整数列表 list1 和 list2。他们的目标是通过某种方式将 list1 转变为一个严格递增的序列。 他们可以执行的操作是:在任意时刻,选择 list1 中的一个元素和 list2 中的一个元素进行替换。具体来说,他们可以选择 list1 的某个位置 i 和 list2 的某个位置 j,并将 2025-01-25 #动态规划 #稀土掘金 #二分查找
357区间和匹配问题 问题描述小 U 手上有两个长度为 n 的数组 A 和 B。她需要找到所有的区间[L, R],满足在这个区间内,数组 A 的元素和在范围[La, Ra]之间,同时数组 B 的元素和在范围[Lb, Rb]之间。你能帮助她计算满足条件的区间数量吗? 解题思路 前缀和预处理 使用前缀和数组 SA 和 SB 分别存储数组 A 和 B 的累积和 二分查找 遍历每个右端点 i 对于每个右端点,需要找到合 2025-01-24 #前缀和 #稀土掘金 #二分查找
349删除路径后的最短路问题 问题描述小 F 正在探索一个有 n 个点的地图,其中每个点都有对应的二维坐标 (xi, yi)。起点是第 s 个点,终点是第 t 个点,原本所有点之间都有一条线段,表示可以通行,并且长度为欧几里得距离。但是由于某些意外,起点 s 和终点 t 之间的直接通行路径被删除了。小 F 希望你帮忙计算从 s 到 t 的最短路径,允许经过其他点,但不能直接通过删除的那条线。 需要注意的是,点 i, j 之间的 2025-01-24 #枚举 #稀土掘金
348分割数字串获取3的倍数问题 问题理解我们需要将一个数字串分割成多个子串,使得这些子串中是 3 的倍数的数量最大化。每个子串不能包含前导零(除了数字 0 本身)。 使用一个数组 f 来记录以每个位置结尾的子串中,最多有多少个是 3 的倍数的子串。 使用一个数组 last 来记录每个余数(0, 1, 2)最后一次出现的位置。 算法步骤 初始化: 初始化 last 数组为 [-1, -1, -1],表示每个余数(0, 1, 2025-01-24 #动态规划 #稀土掘金