def solution(M, A):
result = [0] * M
maxCount = 0
setAll = 0
for i in range(0,len(A)):
if (A[i] == M + 1):
setAll += maxCount
maxCount = 0
result = [0] * M
else:
result[A[i] - 1] += 1
if (result[A[i] - 1] > maxCount):
maxCount = result[A[i] - 1]
for j in range(0,len(result)):
result[j] += setAll
return result
A = [ 1, 1, 1, 1, 2, 3]
M = 2
print solution(M, A) # result = [ 4, 4 ]
A = [ 1, 2, 2, 4, 1, 1]
M = 3
print solution(M, A) # result = [ 4, 2, 2 ]
根据我的计算,solution() 循环 A N 次,然后循环结果 M 次,因此总共是 N+M。 但是,一个在线测试表明它实际上是 N*M,这让我感到困惑。
for i in range(0,len(A)): ... result = [0] * M
。创建赋值语句的右侧应该是Theta(M),这样做N次是Theta(O*N)(最坏情况)。 - Reinstate Monica