![](/img/trans.png)
[英]Is there more effective way to get result (O(n+m) rather than O(n*m))?
[英]Is this function O(N+M) or O(N*M)?
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()循環遍歷AN次,然后循環結果M次,即N + M。 但是,一個在線測試說它是N * M,這讓我很困惑。
是O(M + N)
; 這里沒有嵌套循環。 可以減少大量使用的成本; 漸近地,較小的循環將無關緊要,使其變為O(N)
。
首先,您遍歷A
元素( N
次迭代),然后分別遍歷M
元素。
它是O(N)
,因為給定輸入N, M
有N + M
循環。 出於時間復雜性的考慮,這減少到兩者中較大的一個(假設為N
),因為我們只采用最重要的術語。 如果第二個循環嵌套在第一個循環中,則它將為O(N*M)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.