获得徽章 0
#刷题交流# 最优化存储方案
排序:将所有会员的存储成本按从大到小的顺序排序。
初始化:初始化一个变量来记录当前的存储容器大小。
遍历:从排序后的列表中依次取出会员的存储成本:
如果当前会员是第一个或最后一个(即可以压缩),则将其存储成本减半后加入总存储容器大小。
否则,直接将其存储成本加入总存储容器大小。
返回结果:将最终的存储容器大小保留一位小数并返回。
排序:将所有会员的存储成本按从大到小的顺序排序。
初始化:初始化一个变量来记录当前的存储容器大小。
遍历:从排序后的列表中依次取出会员的存储成本:
如果当前会员是第一个或最后一个(即可以压缩),则将其存储成本减半后加入总存储容器大小。
否则,直接将其存储成本加入总存储容器大小。
返回结果:将最终的存储容器大小保留一位小数并返回。
展开
评论
点赞
#刷题交流# 旋转串匹配
生成所有可能的旋转串:
对于每个字符串 s,将其自身拼接成 s + s。
这样,s + s 包含了 s 的所有旋转串。
检查旋转串:
遍历字符串集合中的每个字符串 s,生成其所有旋转串。
将这些旋转串存储在一个集合中。
如果集合中已经存在某个旋转串,说明存在两个字符串互为旋转串。
生成所有可能的旋转串:
对于每个字符串 s,将其自身拼接成 s + s。
这样,s + s 包含了 s 的所有旋转串。
检查旋转串:
遍历字符串集合中的每个字符串 s,生成其所有旋转串。
将这些旋转串存储在一个集合中。
如果集合中已经存在某个旋转串,说明存在两个字符串互为旋转串。
展开
评论
点赞
#刷题交流# 平衡串转换
统计字符数量:遍历字符串,统计 a、b、c 的数量。
计算目标数量:设 a 的数量为 count_a,b 的数量为 count_b,c 的数量为 count_c。目标是将 count_a 调整为 (count_b + count_c)。
计算操作次数:
如果 count_a 大于 (count_b + count_c),我们需要将多余的 a 转换为 b 或 c。
如果 count_a 小于 (count_b + count_c),我们需要将多余的 b 或 c 转换为 a。
返回最少操作次数。
统计字符数量:遍历字符串,统计 a、b、c 的数量。
计算目标数量:设 a 的数量为 count_a,b 的数量为 count_b,c 的数量为 count_c。目标是将 count_a 调整为 (count_b + count_c)。
计算操作次数:
如果 count_a 大于 (count_b + count_c),我们需要将多余的 a 转换为 b 或 c。
如果 count_a 小于 (count_b + count_c),我们需要将多余的 b 或 c 转换为 a。
返回最少操作次数。
展开
评论
点赞
#刷题交流# 量化数字的统计
遍历数字:使用一个循环从 L 到 R。
检查是否能被 3 整除:使用取模运算 % 检查。
检查所有位数是否相同:将数字转换为字符串,检查字符串的所有字符是否相同。
遍历数字:使用一个循环从 L 到 R。
检查是否能被 3 整除:使用取模运算 % 检查。
检查所有位数是否相同:将数字转换为字符串,检查字符串的所有字符是否相同。
评论
点赞
#刷题交流# 括号匹配策略
初始化一个栈,用于存储左括号。
遍历字符串中的每一个字符:
如果是左括号,将其压入栈中。
如果是右括号,检查栈顶的左括号是否与之匹配:
如果匹配,弹出栈顶元素。
如果不匹配,记录一次修改,并继续遍历。
遍历结束后,栈中剩余的左括号也需要匹配,记录这些修改次数。
返回总的修改次数。
初始化一个栈,用于存储左括号。
遍历字符串中的每一个字符:
如果是左括号,将其压入栈中。
如果是右括号,检查栈顶的左括号是否与之匹配:
如果匹配,弹出栈顶元素。
如果不匹配,记录一次修改,并继续遍历。
遍历结束后,栈中剩余的左括号也需要匹配,记录这些修改次数。
返回总的修改次数。
展开
评论
点赞
#刷题交流# 最大战力问题
初始化:将 power[0] 初始化为 0。
遍历角色:从编号 1 开始,逐步计算每个角色的战力值。
计算战力值:
对于每个角色 i,其战力值 power[i] 应该满足 power[i-1] - 1 <= power[i] <= power[i-1] + 1。
如果有最大战力值限制 maxPower,则 power[i] 不能超过 maxPower。
更新战力值:根据上述规则和限制,更新每个角色的战力值。
返回结果:最终,单个角色能达到的最大战力值就是数组 power 中的最大值。
初始化:将 power[0] 初始化为 0。
遍历角色:从编号 1 开始,逐步计算每个角色的战力值。
计算战力值:
对于每个角色 i,其战力值 power[i] 应该满足 power[i-1] - 1 <= power[i] <= power[i-1] + 1。
如果有最大战力值限制 maxPower,则 power[i] 不能超过 maxPower。
更新战力值:根据上述规则和限制,更新每个角色的战力值。
返回结果:最终,单个角色能达到的最大战力值就是数组 power 中的最大值。
展开
评论
点赞
#刷题交流# 二进制字符串单调递增问题
初始化两个变量 flip_to_zero 和 flip_to_one 为 0。
遍历字符串 s,对于每个字符:
如果当前字符是 1,增加 flip_to_zero 的计数(因为我们需要将这个 1 翻转为 0 以保持单调递增)。
如果当前字符是 0,增加 flip_to_one 的计数(因为我们需要将这个 0 翻转为 1 以保持单调递增)。
在遍历过程中,记录最小的翻转次数,即 min(flip_to_zero, flip_to_one)。
初始化两个变量 flip_to_zero 和 flip_to_one 为 0。
遍历字符串 s,对于每个字符:
如果当前字符是 1,增加 flip_to_zero 的计数(因为我们需要将这个 1 翻转为 0 以保持单调递增)。
如果当前字符是 0,增加 flip_to_one 的计数(因为我们需要将这个 0 翻转为 1 以保持单调递增)。
在遍历过程中,记录最小的翻转次数,即 min(flip_to_zero, flip_to_one)。
展开
评论
点赞
#刷题交流# 优惠价格计算
初始化:创建一个栈和一个变量来存储总优惠。
遍历价格数组:
对于每个商品价格,检查栈顶元素是否小于等于当前价格。
如果栈顶元素小于等于当前价格,则将栈顶元素(即优惠价格)累加到总优惠中,并将栈顶元素弹出。
重复上述步骤,直到栈为空或栈顶元素大于当前价格。
将当前价格压入栈中。
返回总优惠。
初始化:创建一个栈和一个变量来存储总优惠。
遍历价格数组:
对于每个商品价格,检查栈顶元素是否小于等于当前价格。
如果栈顶元素小于等于当前价格,则将栈顶元素(即优惠价格)累加到总优惠中,并将栈顶元素弹出。
重复上述步骤,直到栈为空或栈顶元素大于当前价格。
将当前价格压入栈中。
返回总优惠。
展开
评论
点赞
#刷题交流# 病毒在封闭空间的传播时间
初始化:
将初始感染者的位置加入队列,并记录当前时间为 0。
使用一个二维数组 time 来记录每个座位被感染的时间。
广度优先搜索(BFS):
从队列中取出当前位置,检查其相邻的四个方向(上、下、左、右)。
对于每个相邻位置:
如果该位置未被感染且未超出边界:
如果该位置的人未戴口罩(座位值为 1),直接感染并记录时间为当前时间 + 1。
如果该位置的人戴口罩(座位值为 0),检查是否满足两秒感染条件(即是否在当前时间 + 1 秒内有两个相邻的感染者),如果满足则感染并记录时间为当前时间 + 2,否则不感染。
将新感染的位置加入队列。
终止条件:
当队列为空时,表示所有可能被感染的位置都已被处理。
结果:
返回 time 数组中的最大值,即为病毒感染所有人的最短时间。
初始化:
将初始感染者的位置加入队列,并记录当前时间为 0。
使用一个二维数组 time 来记录每个座位被感染的时间。
广度优先搜索(BFS):
从队列中取出当前位置,检查其相邻的四个方向(上、下、左、右)。
对于每个相邻位置:
如果该位置未被感染且未超出边界:
如果该位置的人未戴口罩(座位值为 1),直接感染并记录时间为当前时间 + 1。
如果该位置的人戴口罩(座位值为 0),检查是否满足两秒感染条件(即是否在当前时间 + 1 秒内有两个相邻的感染者),如果满足则感染并记录时间为当前时间 + 2,否则不感染。
将新感染的位置加入队列。
终止条件:
当队列为空时,表示所有可能被感染的位置都已被处理。
结果:
返回 time 数组中的最大值,即为病毒感染所有人的最短时间。
展开
评论
点赞
#刷题交流# 升级和奖励最大化
初始化:
创建一个列表来存储每个英雄的当前能力值,初始值均为1。
升级操作:
需要找到一种策略,使得在 k 次升级操作内,尽可能多地达到目标值并获得奖励。
可以考虑使用贪心算法或动态规划来解决这个问题。
计算奖励:
在每次升级操作后,检查是否有英雄的能力值达到或超过目标值,并记录获得的奖励。
初始化:
创建一个列表来存储每个英雄的当前能力值,初始值均为1。
升级操作:
需要找到一种策略,使得在 k 次升级操作内,尽可能多地达到目标值并获得奖励。
可以考虑使用贪心算法或动态规划来解决这个问题。
计算奖励:
在每次升级操作后,检查是否有英雄的能力值达到或超过目标值,并记录获得的奖励。
展开
评论
点赞
#刷题交流# 最大关键数查找
从 N 开始向下遍历:因为我们找的是最大的关键数,所以从 N 开始向下遍历可以更快地找到结果。
检查每个数的每一位:对于当前遍历到的数,将其转换为字符串,然后检查每一位数字是否能整除该数。
找到符合条件的关键数:一旦找到一个符合条件的关键数,立即返回该数。
从 N 开始向下遍历:因为我们找的是最大的关键数,所以从 N 开始向下遍历可以更快地找到结果。
检查每个数的每一位:对于当前遍历到的数,将其转换为字符串,然后检查每一位数字是否能整除该数。
找到符合条件的关键数:一旦找到一个符合条件的关键数,立即返回该数。
展开
评论
点赞
#刷题交流# 合的逆运算问题
排序:对 sums 进行排序。
初始化:假设最小的数为 x,那么 x 和 x 的和一定是最小的和。
递归推导:从最小的和开始,逐步推导出其他数。
验证:验证推导出的数是否满足所有和的条件。
排序:对 sums 进行排序。
初始化:假设最小的数为 x,那么 x 和 x 的和一定是最小的和。
递归推导:从最小的和开始,逐步推导出其他数。
验证:验证推导出的数是否满足所有和的条件。
展开
评论
1
#刷题交流# 平衡串转换
统计字符数量:遍历字符串,统计 a、b、c 的数量。
计算目标数量:设 a 的数量为 count_a,b 的数量为 count_b,c 的数量为 count_c。目标是将 count_a 调整为 (count_b + count_c)。
计算操作次数:
如果 count_a 大于 (count_b + count_c),我们需要将多余的 a 转换为 b 或 c。
如果 count_a 小于 (count_b + count_c),我们需要将多余的 b 或 c 转换为 a。
返回最少操作次数。
统计字符数量:遍历字符串,统计 a、b、c 的数量。
计算目标数量:设 a 的数量为 count_a,b 的数量为 count_b,c 的数量为 count_c。目标是将 count_a 调整为 (count_b + count_c)。
计算操作次数:
如果 count_a 大于 (count_b + count_c),我们需要将多余的 a 转换为 b 或 c。
如果 count_a 小于 (count_b + count_c),我们需要将多余的 b 或 c 转换为 a。
返回最少操作次数。
展开
评论
点赞
#刷题交流# 最大战力值计算
预处理:遍历数组 A,将每个元素的奇偶性存储在一个新的数组 parity 中。
三重循环:使用三重循环遍历所有可能的三元组 (i, j, k),并检查它们是否满足 "Zamn" 关系。
计数:如果满足条件,则计数器加一。
预处理:遍历数组 A,将每个元素的奇偶性存储在一个新的数组 parity 中。
三重循环:使用三重循环遍历所有可能的三元组 (i, j, k),并检查它们是否满足 "Zamn" 关系。
计数:如果满足条件,则计数器加一。
展开
2
1
#刷题交流# 最大战力值计算
初始化:
创建一个长度为 n 的数组 power,初始值为 0。
创建一个字典 max_power_limit,将所有限制条件存储进去。
逐步计算战力值:
从编号 1 开始,逐步计算每个角色的战力值。
对于每个角色 i,其战力值 power[i] 应该满足以下条件:
power[i] 不能超过 max_power_limit[i](如果有限制)。
power[i] 不能超过 power[i-1] + 1(因为相邻角色的战力值差不能超过 1)。
返回结果:
最终返回 power 数组中的最大值,即为单个角色能达到的最大战力值。
初始化:
创建一个长度为 n 的数组 power,初始值为 0。
创建一个字典 max_power_limit,将所有限制条件存储进去。
逐步计算战力值:
从编号 1 开始,逐步计算每个角色的战力值。
对于每个角色 i,其战力值 power[i] 应该满足以下条件:
power[i] 不能超过 max_power_limit[i](如果有限制)。
power[i] 不能超过 power[i-1] + 1(因为相邻角色的战力值差不能超过 1)。
返回结果:
最终返回 power 数组中的最大值,即为单个角色能达到的最大战力值。
展开
评论
1
#刷题交流# 逆序对问题:
检查初始状态:首先检查数组中是否已经存在逆序对。如果存在,则不需要任何操作,直接返回 0。
计算操作次数:
如果不存在逆序对,我们需要通过操作使得数组中出现逆序对。
我们可以选择数组中的某个元素 a_i,对其进行加 x 或减 y 的操作。
为了最小化操作次数,我们可以选择数组中的某个元素,使其与相邻元素形成逆序对。
选择最优操作:
比较 x 和 y 的大小,选择操作代价较小的操作。
选择数组中的某个元素,使其与相邻元素形成逆序对。
检查初始状态:首先检查数组中是否已经存在逆序对。如果存在,则不需要任何操作,直接返回 0。
计算操作次数:
如果不存在逆序对,我们需要通过操作使得数组中出现逆序对。
我们可以选择数组中的某个元素 a_i,对其进行加 x 或减 y 的操作。
为了最小化操作次数,我们可以选择数组中的某个元素,使其与相邻元素形成逆序对。
选择最优操作:
比较 x 和 y 的大小,选择操作代价较小的操作。
选择数组中的某个元素,使其与相邻元素形成逆序对。
展开
评论
1
#刷题交流# 糖果吃法优化
初始化 dp 数组,dp[0][0] 表示第0天不使用任何机会的最大美味值为0。
遍历每一天,对于每一天,考虑以下几种情况:
今天不吃糖果。
今天吃糖果,但不使用打破规则的机会。
今天吃糖果,并使用一次打破规则的机会。
更新 dp 数组,确保在每种情况下都能获得最大美味值。
最终答案为 dp[n][k],即在前 n 天中使用 k 次机会所能获得的最大美味值。
初始化 dp 数组,dp[0][0] 表示第0天不使用任何机会的最大美味值为0。
遍历每一天,对于每一天,考虑以下几种情况:
今天不吃糖果。
今天吃糖果,但不使用打破规则的机会。
今天吃糖果,并使用一次打破规则的机会。
更新 dp 数组,确保在每种情况下都能获得最大美味值。
最终答案为 dp[n][k],即在前 n 天中使用 k 次机会所能获得的最大美味值。
展开
评论
点赞
#刷题交流# 最大相等分割红包金额
算法步骤
计算前缀和数组:首先计算红包数组的前缀和数组,这样我们可以快速计算任意子数组的和。
遍历所有可能的切割点:我们需要遍历所有可能的切割点对 (i, j),其中 i 是第一个切割点,j 是第二个切割点。
检查条件:对于每一对切割点 (i, j),检查第一部分和第三部分的和是否相等。
更新最大值:如果相等,更新当前的最大奖金金额。
算法步骤
计算前缀和数组:首先计算红包数组的前缀和数组,这样我们可以快速计算任意子数组的和。
遍历所有可能的切割点:我们需要遍历所有可能的切割点对 (i, j),其中 i 是第一个切割点,j 是第二个切割点。
检查条件:对于每一对切割点 (i, j),检查第一部分和第三部分的和是否相等。
更新最大值:如果相等,更新当前的最大奖金金额。
展开
评论
2