如何对其进行优化以使其在时间和空间复杂性方面更高效,同时产生相同的输出?
def not-optimal(A):
N = len(A)
result = 0
for i in xrange(N):
for j in xrange(N):
if A[i] == A[j]:
result = max(result, abs(i - j))
答案 0 :(得分:1)
最好不要从代码开始,而是从这个代码的作用开始。此代码返回数组中任何两个元素之间的最大距离。现在的问题是,你是否能找到一种能够实现同一目标的不同算法的时间或空间更短。
您可以通过几种不同的方式在这里交换时间。这是一个简单的选项:创建一个哈希表,将每个元素映射到它出现的 last 索引。这需要预期的时间O(n)。然后,第二次遍历数组,并为每个元素查看该元素的最后一个副本的索引并计算到该元素的距离,跟踪到目前为止您看到的最大元素。第二步需要时间O(n),因此整个算法需要预期时间O(n)并使用空间O(n)。这是O(n 2 )时间,O(1) - 空间算法的时间改进。
由于它使用空间O(1),因此无法渐近地改进此算法的空间复杂度。最好的情况是你会从空间使用中削减一个恒定的因素,但你的算法是如此节省空间,我无法想象这真的很重要。
希望这有帮助!