【发布时间】:2020-08-29 13:59:39
【问题描述】:
“给你一个只读的 n 个整数数组。找出是否有任何整数在线性时间和恒定附加空间中在数组中出现超过 n/3 次。 如果是,则返回整数。如果不是,则返回-1。 如果有多个解决方案,返回任何一个"
对于上述问题,我有两个答案,其中一个是在线性时间内被接受的。
这个没有被接受(部分接受)TLE
def repeatedNumber(self, A):
A=list(A)
n=len(A)
b=list(set(A))
if(len(A)==1 or len(A)==2):
return A[0]
if(len(b)==n):
return(-1)
for i in range(len(b)):
if(A.count(b[i])>n//3):
return b[i]
return(-1)
此代码正在被接受
def repeatedNumber(self, A):
A=list(A)
n=len(A)
ck={}
for i in A:
if i not in ck:
ck[i]=1
else:
ck[i]+=1
if(ck[i]>n/3):
return i
return(-1)
此代码在线性运行时被接受。虽然 for 循环运行 n 次,但时间复杂度应该是 O(n)。但这在线性时间内执行。谁能解释一下?
【问题讨论】:
-
第一次在最坏的情况下以二次时间运行,因为
A.count(b[i])花费的时间与A的长度成正比。 -
我不明白你对 O(n) 和线性时间的区别
-
下界解是常数空间。
标签: algorithm python-2.7 dictionary time-complexity