【发布时间】:2017-07-22 10:05:43
【问题描述】:
我对时间复杂度问题完全陌生。我正在为 Codility 练习编写 Python 代码,我编写的代码返回超时错误,时间复杂度为 O(N*N)。预期时间复杂度为 O(N)。
给定一个整数列表A,
对于A 中的所有索引i,我正在尝试计算A[0:i] 的总和与A[i:] 的总和之间的最小差异。
这是我的解决方案:
def solution(A):
# write your code in Python 2.7
a=[]
for i in range(1,len(A)):
a.append(abs(sum(A[0:i])-sum(A[i:len(A)+1])))
return min(a)
我尝试通过实现以下来改进代码
import sys
def solution(A):
# write your code in Python 2.7
a=sys.maxint
for i in range(1,len(A)):
temp=abs(sum(A[0:i])-sum(A[i:len(A)+1]))
if temp<a:
a=temp
return a
我仍然得到同样的复杂性。我了解abs 步骤需要大量时间来计算。如何降低此代码的时间复杂度?是否有一种直观的方式来看待时间复杂度问题?
【问题讨论】: