我在尝试鳕鱼的练习问题。以下是代码。我不明白为什么需要这么长时间才能运行。这里,输入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
答案 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时,复制您传递的列表的一部分。使用偏移而不是复制列表应该可以显着提高性能。