📅  最后修改于: 2023-12-03 15:23:33.254000             🧑  作者: Mango
在一个排序的数组中,如果元素之间的差值是固定的,那么可以使用二分查找来找到缺失的数字。
如果元素之间的差值不是固定的,可以使用暴力枚举或者线性查找的方式来找到缺失的数字。
下面是使用二分查找的代码片段:
def findMissingNumber(nums):
left = 0
right = len(nums) - 1
diff = nums[1] - nums[0]
while left < right:
mid = (left + right) // 2
if nums[mid] - nums[mid - 1] != diff:
return nums[mid] - diff
elif nums[mid + 1] - nums[mid] != diff:
return nums[mid] + diff
else:
if nums[mid] - nums[0] != mid * diff:
right = mid
else:
left = mid + 1
return -1
这个算法的时间复杂度为 $O(log n)$,空间复杂度为 $O(1)$。
使用线性查找的代码片段:
def findMissingNumber(nums):
for i in range(len(nums)):
if nums[i] != i:
return i
return len(nums)
这个算法的时间复杂度为 $O(n)$,空间复杂度为 $O(1)$。
以上两种算法都可以找到一个排序的数组中缺失的数字,具体选择哪种算法取决于数据量的大小和计算机资源的限制。