ArrayOne输入示例:[-1、5、10、20、28、3]
示例ArrayTwo输入:[26、134、135、15、17]
我猜是O(n ^ 2 + m ^ 2),其中n是ArrayOne的长度,m是ArrayTwo的长度?
答案 0 :(得分:1)
假设len(arrayOne) = n
和len(arrayTwo) = m
i = 0 and j = 0
从头开始,您会看到一个外部的while循环,该循环不会立即持续多久。
在while循环中,您需要进行一些固定的工作,然后检查是否为j == m
。这是不正确的,因此j
被递增m
次。
现在,j == m
可以增加i
并设置j = -1
。这意味着j
将再次增加m
次。 i
递增,j
重置。
j
将重置n
次。
因此,这里的内部循环可以用m
表示。还有n
的外循环。
因此,该算法的运行时复杂度为O(n * m)
答案 1 :(得分:1)
为什么哦,为什么这段代码不只是写成:
minDiff = float("inf")
for value1 in arrayOne:
for value2 in arrayTwo:
minDiff = min(minDiff, abs(value1 - value2))
感觉这段代码已经过时了,无法掩盖它是一对嵌套迭代的事实,而且时间很明显。
这也意味着它可以在Python中写成一行:
minDiff = min(abs(value1 - value2) for value1 in arrayOne for value2 in arrayTwo)