候鸟解决方案

时间:2019-06-23 05:31:33

标签: python python-3.x

我在HackerRank上为此practice编写了此解决方案,但不适用于大数据“由于超时而终止”。我将在此处包括问题描述。

  

已要求您帮助研究在整个非洲大陆迁移的鸟类数量。您感兴趣的每种鸟类都将以整数值标识。每次发现特定种类的鸟,其ID号都会添加到您的瞄准具中。您可以根据目击清单找出哪种鸟是最常见的。您的任务是打印那只鸟的类型编号,如果两种或两种以上的鸟同样常见,请选择ID编号最小的类型。

     

例如,假设您看到的鸟类是arr = [1,1,2,2,3]类型。类型1和2分别有两种,一种是类型3的目击者。从两次见过的两种类型中选择较低的一种:类型1。

     

功能描述:

     

在下面的编辑器中完成migratoryBirds函数。它应返回最常出现的鸟类的最低类型编号。   migratoryBirds具有以下参数:

     

arr:代表观察到的鸟类类型的整数数组

     

输入格式

     

第一行包含一个整数n,表示在数组arr中看到并报告的鸟的数量。

     

第二行将arr描述为n个以空格分隔的整数,代表所看到的每只鸟的类型编号。

     

约束

     

5 <= n <= 2 X 10 ^ 5

     

保证每种类型为1、2、3、4或5。

我的代码如下。

    result=" "
    for i in arr:
        for j in arr:
            if arr.count(i)>=2 and arr.count(j)<2:
                result=i


            elif arr.count(i)==arr.count(j)>=2 and j<i:
                result=j         

   print(result)     

我该如何改善?

3 个答案:

答案 0 :(得分:0)

您的代码遇到超时错误,因为您的代码的复杂度为O(n ^ 3)。

要通过测试,您需要一种O(n)算法,该算法可以如下实现。

准备一个长度为5的列表,将它们全都初始化为0。我们将使用该列表来计算每种类型的鸟的数量。如果您愿意,也可以使用字典。

现在,遍历输入数组并增加计数。也就是说,如果遇到类型i,则将第(i-1)个条目增加1。

现在查找最大数量并返回相应的索引+1。

def migratoryBirds(arr):
    typecount = [0 for i in range(5)]
    for i in arr:
        typecount[i-1] += 1
    max_count = max(typecount)
    for i in range(5):
        if typecount[i] == max_count:
            return i+1

答案 1 :(得分:0)

您可以使用collections.Counter进行此操作:

from collections import Counter


a = [int(e) for e in "1 2 3 4 5 4 3 2 1 3 4".split(' ')]
c = Counter(a).most_common()
print(sorted([elt for elt in c if elt[1] == c[0][1]])[0][0])

答案 2 :(得分:0)

由于时间复杂度o(n3),您的代码会超时

enter code
  here

首先,您需要对数组进行排序,并使用计数器来计数元素,然后使用max函数获得所需的否