Hackerrank问题:寻找亚军分数代码运行异常调试求助
调试「寻找亚军分数」Python代码的问题点
这段代码在处理诸如输入包含10和5555555556的测试用例时出错,核心问题是更新最大值时没有同步更新亚军分数:
比如测试用例输入:
2 10 5555555556
代码执行过程:
- 初始
max=-101,secondmax=-101 - 第一个元素
10:因为-101 < 10,max被更新为10,secondmax仍为-101 - 第二个元素
5555555556:因为10 < 5555555556,max被更新为5555555556,但此时没有把原来的max(也就是10)赋值给secondmax,最终输出的secondmax还是-101,显然错误。
修正思路
- 当发现新的最大值时,先将当前最大值赋值给亚军变量,再更新最大值
- 初始值设置更通用,避免固定数值限制(比如用数组第一个元素初始化最大值,用负无穷初始化亚军)
修正后的代码
if __name__ == '__main__': n = int(input()) arr = list(map(int, input().split())) max_score = arr[0] second_max = -float('inf') for score in arr: if score > max_score: # 新最大值出现,原最大值降级为亚军候选 second_max = max_score max_score = score elif score < max_score and score > second_max: second_max = score print(second_max)
关键修正点说明
- 用数组第一个元素初始化
max_score,适配题目中所有可能的分数范围,不会被固定初始值限制 - 遇到更大的分数时,先同步更新亚军变量,确保原最大值不会丢失
- 用
-float('inf')作为second_max的初始值,能处理所有小于数组最大值的分数情况 - 针对数组中有多个相同最大值的情况(比如
[5555555556, 5555555556, 10]),代码会正确忽略重复的最大值,保留真正的亚军分数
内容的提问来源于stack exchange,提问作者user21242657
相关产品推荐
相关产品推荐

