本文介绍了查找列表中的第二大元素(对于重复元素)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试查找数组中的第二大元素。我的代码对大多数输入都有效,但对于某些输入,它却失败了。
另外,如果我输入[6, 6, 6, 5]
,程序应该输出5作为第二大数,而不是6。
对于[6,6,6,6,6,6,6,6,6,5]
,打印的是6而不是5。
对于重复的元素,它会给出错误的结果。
# Given the participants' score sheet for your University Sports Day, you are required to find the runner-up score.
# You are given scores. Store them in a list and find the score of the runner-up.
if __name__ == '__main__':
n = int(input("Enter the total numbers: "))
arr = list(map(int, input("Enter the numbers: ").split()))
if arr[0] >= arr[1]:
first_max = arr[0]
second_max = arr[1]
else:
first_max = arr[1]
second_max = arr[0]
for i in range(2, n):
if arr[i] > first_max:
second_max = first_max
first_max = arr[i]
elif arr[i] > second_max and arr[i] != first_max:
second_max = arr[i]
print(second_max)
请谁来解释一下背后的逻辑。
推荐答案
问题在于您在此处编写的第一个和第二个最大值的初始化
if arr[0] >= arr[1]:
first_max = arr[0]
second_max = arr[1]
else:
first_max = arr[1]
second_max = arr[0]
在[6,6,6,6,6,6,6,6,6,5]
的情况下,first_max和Second_max都等于6,并且在被指定为5时无法更改,因为第二个max仍然大于5。
解决方案是编辑这部分代码
之前
elif arr[i] > second_max and arr[i] != first_max:
second_max = arr[i]
之后
elif first_max == second_max or (arr[i] > second_max and arr[i] != first_max:
second_max = arr[i])
这篇关于查找列表中的第二大元素(对于重复元素)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!