优化Python代码以返回列表中出现次数最多的最小元素

2024-09-30 20:30:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图用Python解决HackerRanks的一个容易评级的问题。我的代码解决了5个测试用例中的4个,但是对于其中一个测试用例,我收到了一条错误消息,说超出了时间限制。请推荐优化此功能的方法。我是python的初学者,仍在努力理解itertools,但它似乎相当复杂

问题陈述: 给定一组鸟类目击事件,其中每个元素代表一个鸟类类型id,确定最常见类型的id。如果发现超过1种类型的ID超过最大数量,请返回它们的最小ID

样本输入:arr=[1,2,3,4,5,4,3,2,1,3,4] 样本输出:3

我当前的代码:

def migratoryBirds(arr):
    d={}
    arr2=[]
    for i in range(len(arr)):
        d[arr[i]]=arr.count(arr[i])
    for i in d.keys():
        if d[i]==max(d.values()):
            arr2.append(i)
    return(min(arr2))

Tags: 代码inid消息类型for鸟类错误
3条回答

由于使用.count()函数多次遍历整个数组,因此算法速度较慢。在第二个循环中,您还将使用max()函数多次查看字典。这导致了O(N^2)时间复杂度

要实现O(N)时间,您应该在数组中只为每个项添加1,然后根据最大总id/min id处理字典:

arr=[1,2,3,4,5,4,3,2,1,3,4]

counts = {}
for bird in arr: counts[bird] = counts.get(bird,0) + 1      # +1 per bird
result,_ = max(counts.items(),key=lambda kv:(kv[1],-kv[0])) # max total / min id

print(result) # 3
def migratoryBirds(arr):                                                                                                                                                                                                                                                                    
    most_common_item = max(arr, key=arr.count)           
    print(most_common_item)


migratoryBirds([1, 2, 3, 4, 5, 4, 3, 2, 1, 3, 4]) # Testing

我也是python中的一个新条目! 我是这样解决的……也许这不是练习的范围,也许这将是您所见过的运行中最糟糕的代码……但它可以运行!:D

arr=[1,2,3,4,5,4,3,2,1,3,4]

import pandas as pd
a=pd.Series(arr)

x=a.value_counts()==a.value_counts().max()
print( x[x].tail(1).index[0] )

相关问题 更多 >