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 ]
By my count, solution() loops through A N times and then loops result M times thus N+M. However, an online test said that it was instead N*M, leaving me stumped.