计算时间复杂度为O(nlogn)的列表中的出现
问题内容:
这是我到目前为止所拥有的:
alist=[1,1,1,2,2,3,4,2,2,3,2,2,1]
def icount(alist):
adic={}
for i in alist:
adic[i]=alist.count(i)
return adic
print(icount(alist))
我进行了一些研究,发现list.count()的时间复杂度为O(n),因此,此代码将为O(n ^ 2)。
有没有办法将其减少为O(nlogn)?
问题答案:
您可以使用Counter
这样的
from collections import Counter
alist=[1,1,1,2,2,3,4,2,2,3,2,2,1]
print Counter(alist)
如果您想使用自己的解决方案,可以像这样改善它
def icount(alist):
adic = {}
for i in alist:
adic[i] = adic.get(i, 0) + 1
return adic
更好的是,您可以defaultdict
像这样使用
from collections import defaultdict
adic = defaultdict(int)
for i in alist:
adic[i] += 1
return adic
另外,您可能想在这里查看对不同Python对象进行的各种操作的时间复杂度