【发布时间】:2021-07-16 21:04:28
【问题描述】:
关于在 Hackerrank 上查找亚军分数的问题。 给定参加者的大学运动会成绩单,您需要找到亚军成绩。给你分数。将它们存储在一个列表中,然后找到亚军的分数。
输入格式
第一行包含 n。第二行包含一个由 n 个整数组成的数组 A[],每个整数用空格分隔。
输出格式
打印亚军成绩。
示例输入
5
2 3 6 6 5
样本输出
5
据我了解这个问题。第一行是 n 的输入,第二行是大小为 n 的数组 A[] 的输入。 p>
我找到了解决办法:
if __name__ == '__main__':
n = int(input())
arr = map(int, input().split())
print (sorted(set(arr))[-2])
另一个来源的另一个解决方案:
if __name__=="__main__":
n = int(input())
arr = map(int, input().split())
arr = list(set(list(arr)))
ar = len(arr)
arr = sorted(arr)
print(arr[ar-2])
它们都工作得很好,但我发现问题是数组的大小不依赖于 n 的输入。例如,如果我们这样做
示例输入
5
2 3 6 6 5 6 7 8 9 10 11
那么输出将是 10
样本输出
10
我们如何解决这个问题,第二行中数组的大小将是第一行中 n 的值?
【问题讨论】:
-
没问题。这个问题以与语言无关的方式提出。在某些语言中,您可能需要在解析第二行之前知道会有多少项目(或者至少,提前知道这一点很方便)。在 Python 中并非如此。
input().split()将返回一个列表,只要需要保存所有数组元素。 -
@chepner 那么我们不需要第一行(n的输入)来让代码正常工作吗?
-
除非
n != len(arr),否则你应该做一些具体的事情。 -
是的。只是因为 Hackerrank 上的问题要求“第一行包含 n。第二行包含一个由 n 个整数组成的数组 A[],每个整数用空格分隔”。所以我认为第二行没有满足问题
-
刚刚解决了,我认为你不需要关心
n。如果我忽略n,我的测试用例似乎都不在乎。