2015-04-28 34 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