我在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)
我该如何改善?
答案 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函数获得所需的否