为什么这段代码需要这么长时间?

时间:2016-12-04 04:05:04

标签: python

我在尝试鳕鱼的练习问题。以下是代码。我不明白为什么需要这么长时间才能运行。这里,输入A是六个元素的列表,运行时间超过五秒。谁能告诉我这个的原因?

def solution(A):
    ln=len(A)
    if ln>1:
        mid = ln//2
        left_h=A[:mid]
        right_h=A[mid:]
        a=solution(left_h)
        b=solution(right_h)
        i=0
        j=0

        tmp=0

        while i<mid and j<ln-mid:
            if left_h[i]>right_h[j]:
                tmp+=1
                i+=1
                j+=1
        return a+b+tmp
    else:
        return 0

3 个答案:

答案 0 :(得分:3)

while i<mid and j<ln-mid:
    if left_h[i]>right_h[j]:
        tmp+=1
        i+=1
        j+=1

如果if语句为false,则不会更新变量,并且您有无限循环。

答案 1 :(得分:0)

如果left_h[i]>right_h[j]为假,它会进入无限循环。

你可能意味着

    while i<mid and j<ln-mid:
        if left_h[i]>right_h[j]:
            tmp+=1
        i+=1
        j+=1

答案 2 :(得分:-1)

left_h=A[:mid]
right_h=A[mid:]

每次函数recurses时,复制您传递的列表的一部分。使用偏移而不是复制列表应该可以显着提高性能。