所以我一直在进行关于 codility 的测试,并且对“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 counters 都会填满整个数组。

所以我想出了以下解决方案,它似乎适用于小输入,但随机为中型和大型输入提供了不正确的结果。
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/

最佳答案

一个问题在这里:

counters[a - 1] += 1
if counters[a - 1] < last_update:
    counters[a - 1] = last_update + 1

如果 counters[a - 1]last_update - 1 呢?

关于python - Max Counters codility 挑战的这个解决方案有什么问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20506849/

10-13 09:13