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次,然后循环结果M次,因此N + M. 然而,在线测试表明它是N * M,让我感到难过。
答案 0 :(得分:6)
是O(M + N)
;这里没有嵌套循环。这可以减少到更大数量的成本;渐渐地,较小的循环不重要,使其成为O(N)
。
首先,您遍历A
个元素(N
次迭代),然后单独循环遍历M
个元素。
答案 1 :(得分:5)
它是O(N)
,因为给定输入N + M
有N, M
个循环。出于时间复杂性的目的,这减少到两者中的较大者(假设为N
),因为我们只采用最重要的术语。如果第二个循环嵌套在第一个循环中,它将是O(N*M)
。