【问题标题】:Python Find the Runner-Up ScorePython 查找亚军分数
【发布时间】: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,我的测试用例似乎都不在乎。

标签: python list


【解决方案1】:

首先按降序对数组进行排序,然后从列表中选择第一个元素,然后循环遍历列表并查找列表中的下一项是否与最高项相同,如果是,则取消该迭代,如果不是然后选择第二个并打破循环

这是我的简单python代码。

sortedArr = sorted(arr,reverse=True)    
    highest = sortedArr[0]
    secondHighest = 0
    for x in (sortedArr):
        if(x == highest):
            continue
        else:
            secondHighest = x
            break
    print(secondHighest)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2016-03-17
    • 2016-01-10
    • 1970-01-01
    • 2015-04-05
    • 2016-11-24
    相关资源
    最近更新 更多