计算未通过测试用例的数组中变量的数量

时间:2018-08-11 18:33:04

标签: arrays python-3.x

所以我正在用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

1 个答案:

答案 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))

请注意,变量名是描述性的。这有助于确保每个变量的目的明确,并减少关于程序状态的错误和错误假设。