我有一个有趣的问题,给定两个已排序的数组:
a 有 n 个元素,b 有 n-1 个元素。
b 包含 a 的所有元素,但缺少一个元素。
如何在 O(log n) 的时间内找到该元素?
我已尝试了以下代码:
def lostElements2(a, b):
if len(a)<len(b):
a, b = b, a
l, r = 0, len(a)-1
while l<r:
m = l + (r-l)//2
if a[m]==b[m]:
l = m+1
else:
r = m - 1
return a[r]
print(lostElements2([-1,0,4,5,7,9], [-1,0,4,5,9]))
我不确定在函数中应该返回什么,是a[l]还是a[r]?
我理解了函数内部的逻辑:如果两个数组的中间值相等,则意味着从b的起点到中间点的元素与a相同,因此缺失的元素必定在中间点右侧。
但我无法创建最终的解决方案,循环应该在何时停止?应该返回什么?如何确保a[l]或a[r]确实是缺失的元素?
sum(a) - sum(b)
? - Mr. T