因此,我一直在进行关于编码的测试,并且对"Max Counters"(位于https://codility.com/demo/take-sample-test/max_counters)感到困惑.我的第一个显而易见的解决方案是:
def solution(N, A): counters = N * [0]; for a in A: if 1 <= a <= N: counters[a - 1] += 1; elif a == N + 1: counters = N * [max(counters)]; return counters
由于每次调用max计数器填充整个数组,因此工作得很好,但需要花费太多时间.
所以我提出了以下解决方案,似乎适用于小输入,但随机提供中等和大的不正确的结果.
def solution(N, A): counters = N * [0]; current_max = 0; last_update = 0; for a in A: if 1 <= a <= N: counters[a - 1] += 1; if counters[a - 1] < last_update: counters[a - 1] = last_update + 1; if counters[a - 1] > current_max: current_max = counters[a - 1]; elif a == N + 1: last_update = current_max; for i in xrange(len(counters)): if counters[i] < last_update: counters[i] = last_update; return counters
我似乎无法弄清楚它有什么问题.
编辑:结果 - http://codility.com/demo/results/demoQA7BVQ-NQT/