You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,显然错误。

修正思路

  1. 当发现新的最大值时,先将当前最大值赋值给亚军变量,再更新最大值
  2. 初始值设置更通用,避免固定数值限制(比如用数组第一个元素初始化最大值,用负无穷初始化亚军)

修正后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:06:04