问题描述
小U在一款挂机游戏中拥有n个英雄。游戏中有一种历练升级机制,每天可以选择两个英雄进行历练,如果两位英雄的等级相同,则他们的等级都不会改变。如果英雄等级不同,那么等级较高的英雄会增加1级,而等级较低的英雄则保持不变。
小U希望至少有一个英雄能够达到2000000000000000级,他想知道有多少英雄有潜力通过历练达到这个等级。
利用豆包MarsCode AI为我提供了编码思路: 问题理解 小U有n个英雄,每个英雄有一个初始等级。每天可以选择两个英雄进行历练,如果两个英雄等级相同,则等级不变;如果等级不同,则等级较高的英雄增加1级,较低的英雄保持不变。目标是找出有多少英雄有潜力通过历练达到2000000000000000级。 关键点 等级增加机制:只有当两个英雄等级不同时,等级较高的英雄才会增加1级。 潜力英雄:一个英雄有潜力达到2000000000000000级,意味着它当前的等级必须大于某个特定的值。 解题思路 找到最低等级:首先,找到所有英雄中的最低等级。 筛选潜力英雄:只有等级大于最低等级的英雄才有可能通过历练达到2000000000000000级。 算法步骤 遍历所有英雄,找到最低等级。 再次遍历所有英雄,统计等级大于最低等级的英雄数量。
根据编码思路编写了如下代码:
# 找到最低等级的英雄
min_level = min(u)
# 筛选潜力英雄(等级大于最低等级的英雄)
potential_heroes = sum(1 for level in u if level > min_level)
return potential_heroes
if __name__ == '__main__':
print(solution(n=5, u=[1, 2, 3, 1, 2]) == 3) # 3 个英雄有潜力
print(solution(n=4, u=[100000, 100000, 100000, 100000]) == 0) # 全部等级相同,无潜力
print(solution(n=6, u=[1, 1, 1, 2, 2, 2]) == 3) # 3 个英雄有潜力
利用豆包MarsCode AI帮我检查了代码:
代码分析 找到最低等级的英雄: 使用 min(u) 找到最低等级,这是正确的。 筛选潜力英雄: 使用列表推导式 sum(1 for level in u if level > min_level) 统计等级大于最低等级的英雄数量,这也是正确的。 测试用例: 测试用例覆盖了不同的情况,包括所有英雄等级相同的情况,以及有潜力英雄的情况。 结论 你的代码逻辑是正确的,并且测试用例也覆盖了不同的情况。代码可以正常工作。