题目理解
题目描述了一个挂机游戏中的历练升级机制。玩家拥有 n 个英雄,每个英雄有一个初始等级。每天可以选择两个英雄进行历练,如果两个英雄的等级相同,则他们的等级都不会改变;如果等级不同,等级较高的英雄会增加1级,而等级较低的英雄保持不变。玩家的目标是找出有多少英雄有潜力通过历练达到2000000000000000级。
解题思路
- 找出最低等级:首先,我们需要找出所有英雄中的最低等级。这个步骤是为了确定哪些英雄的等级高于最低等级,因为只有这些英雄才有潜力通过历练达到更高的等级。
- 统计有潜力的英雄数量:遍历所有英雄的等级,如果某个英雄的等级大于最低等级,则认为该英雄有潜力。
代码实现
def solution(n: int, u: list) -> int:
# 找出最低等级
min_level = min(u)
# 统计有潜力的英雄数量
potential_count = 0
for level in u:
if level > min_level: # 修改这里
potential_count += 1
return potential_count
if __name__ == '__main__':
print(solution(n = 5, u = [1, 2, 3, 1, 2]) == 3)
print(solution(n = 4, u = [100000, 100000, 100000, 100000]) == 0)
print(solution(n = 6, u = [1, 1, 1, 2, 2, 2]) == 3)
代码分析
- 找出最低等级:使用
min(u)函数找出所有英雄中的最低等级。这个步骤的时间复杂度是O(n),其中n是英雄的数量。 - 统计有潜力的英雄数量:遍历所有英雄的等级,如果某个英雄的等级大于最低等级,则
potential_count加1。这个步骤的时间复杂度也是O(n)。
测试样例分析
-
样例1:
- 输入:
n = 5, u = [1, 2, 3, 1, 2] - 最低等级:
1 - 有潜力的英雄数量:
3(等级为2和3的英雄有潜力) - 预期输出:
3
- 输入:
-
样例2:
- 输入:
n = 4, u = [100000, 100000, 100000, 100000] - 最低等级:
100000 - 有潜力的英雄数量:
0(所有英雄等级相同,没有英雄有潜力) - 预期输出:
0
- 输入:
-
样例3:
- 输入:
n = 6, u = [1, 1, 1, 2, 2, 2] - 最低等级:
1 - 有潜力的英雄数量:
3(等级为2的英雄有潜力) - 预期输出:
3
- 输入:
代码优化
虽然当前的代码已经能够正确解决问题,但我们可以进一步优化代码的逻辑。例如,我们可以直接找出所有英雄中等级最高的英雄,然后统计等级等于最高等级的英雄数量。这样可以直接判断哪些英雄有潜力达到2000000000000000级。
优化后的代码
def solution(n: int, u: list) -> int:
# 找出最高等级
max_level = max(u)
# 统计有潜力的英雄数量
potential_count = 0
for level in u:
if level == max_level: # 只有等级等于最高等级的英雄才有潜力
potential_count += 1
return potential_count
if __name__ == '__main__':
print(solution(n = 5, u = [1, 2, 3, 1, 2]) == 1)
print(solution(n = 4, u = [100000, 100000, 100000, 100000]) == 0)
print(solution(n = 6, u = [1, 1, 1, 2, 2, 2]) == 3)
优化后的代码分析
- 找出最高等级:使用
max(u)函数找出所有英雄中的最高等级。这个步骤的时间复杂度是O(n)。 - 统计有潜力的英雄数量:遍历所有英雄的等级,如果某个英雄的等级等于最高等级,则
potential_count加1。这个步骤的时间复杂度也是O(n)。
总结
通过这个题目,我们学习了如何通过简单的遍历和比较来解决一个实际问题。我们还学习了如何优化代码,使其更加简洁和高效。在实际编程中,理解题目要求、选择合适的数据结构和算法、以及进行代码优化都是非常重要的技能。希望这个做题笔记能够帮助你更好地理解和掌握这些技能。