所以我正在用Hackerrank编写程序。
问题是
已要求您帮助研究在整个非洲大陆迁移的鸟类数量。您感兴趣的每种鸟类都将以整数值标识。每次发现特定种类的鸟,其ID号都会添加到您的瞄准具中。您可以根据目击清单找出哪种鸟是最常见的。您的任务是打印那只鸟的类型编号,如果两种或两种以上的鸟同样常见,请选择ID编号最小的类型。
例如,假设您目睹的鸟类是类型。类型和分别有两种和一种类型。选择两次看到的两种类型中的较低者:类型。
功能说明
在下面的编辑器中完成migratoryBirds函数。它应该返回最常看见的鸟的最低类型编号。
migratoryBirds具有以下参数:
arr: an array of integers representing types of birds sighted
输入格式
第一行包含一个整数,表示在数组中发现和报告的鸟类数量。 第二行用空格分隔的整数表示被看见的每只鸟的类型编号。
约束
It is guaranteed that each type is , , , , or .
输出格式
打印最常见鸟类的类型编号;如果两种或两种以上的鸟类同等常见,请选择ID编号最小的类型。
x = []
for i in range (0,len(arr)):
x.append(arr.count(arr[i]))
for i in range(0,len(x)):
if x[i] == max(x):
out = i
return out
答案 0 :(得分:0)
即使固定缩进,我也看不到您的代码可以通过任何测试用例。您的输入大小可以最大为10 5 ,因此几乎消除了所有需要遍历整个列表的 O(n 2 )解决方案,这是不必要的。罪魁祸首是arr.count()
,它遍历每个元素的整个列表。您可能打算遍历每种鸟类的列表,这将导致遍历输入列表的5次:
x = []
for i in range(1, 6):
x.append(arr.count(i))
out = 0
best = x[0]
for i in range(len(x)):
if x[i] > best:
best = x[i]
out = i
return out + 1
此问题中要注意的重要限制是只有5种鸟类型(编号1-5),因此我们可以使用位置0处的虚拟元素初始化长度为6的counts
数组,因此索引映射整齐地计数。然后,我们可以一遍遍遍输入的鸟类类型列表,从而更新计数器数组。最后,获取计数器数组的最大索引。 max()
的工作方式自动处理了“最小的联系ID”限制-它会自动获取最小的索引。这是代码:
counts = [-1, 0, 0, 0, 0, 0]
for bird in arr:
counts[bird] += 1
return counts.index(max(counts))
请注意,变量名是描述性的。这有助于确保每个变量的目的明确,并减少关于程序状态的错误和错误假设。