簡體   English   中英

這個函數是O(N + M)還是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, MN + M循環。 出於時間復雜性的考慮,這減少到兩者中較大的一個(假設為N ),因為我們只采用最重要的術語。 如果第二個循環嵌套在第一個循環中,則它將為O(N*M)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM