2015-04-28 61 views
0

我正在學習編碼課(https://codility.com/media/train/2-CountingElements.pdf),我需要幫助來理解最快的解決方案。編碼計數課程2:交換陣列元素

我想知道是什麼計數功能是指:

count = counting(A, m) 

問題:

您將得到一個整數M(1<米< 1000000)和兩個非空,零索引陣列A和B分別爲n個整數,a0,a1,...,an-1和b0,b1,...,bn-1(0 < ai,bi < m)。我們的目標是檢查是否存在可以在這些數組上執行的交換操作,使得數組A中元素的總和等於交換後數組B中元素的總和。通過交換操作,我們指的是從數組A中選取一個元素並從數組B中選取一個元素並交換它們。 解決辦法:

def fast_solution(A, B, m): 
    n = len(A) 
    sum_a = sum(A) 
    sum_b = sum(B) 
    d = sum_b - sum_a 
    if d % 2 == 1: 
     return False 
    d //= 2 
    count = counting(A, m) 
    for i in xrange(n): 
     if 0 <= B[i] - d and B[i] - d <= m and count[B[i] - d] > 0: 
      return True 
    return False 
+1

'counting'不是Python中的內置函數,它必須來自它們。你能提供它的來源嗎? – L3viathan

回答

2

計數早在文本中定義並實現如下:

def counting(A, m): 
    n = len(A) 
    count = [0] * (m + 1) 
    for k in xrange(n): 
     count[A[k]] += 1 
    return count 

它只是計數的每個元素有多少次出現在數組中。

+0

ohh,你說得對。我沒有看到。 :) 非常有用,你回答。 謝謝! – mijhael3000