📅  最后修改于: 2023-12-03 15:28:45.333000             🧑  作者: Mango
这是一道面试题,在一个数组中,存储了从1到n的数字,其中缺失了一个数字。你需要编写一个函数来找出缺失的数字。
输入的参数是一个数组,其中存储了从1到n-1的数字,且每个数字只出现一次。
输出缺失的数字。
输入: [1, 2, 3, 4, 6, 7, 8]
输出: 5
这道题可以用两种方式来解决。
首先,我们可以求出1到n的数字之和,然后再计算出给定数组中数字的和,两者相减就是缺失的数字。
def findMissingNumber(arr):
n = len(arr) + 1
total = n * (n + 1) // 2
sum_arr = sum(arr)
return total - sum_arr
这是一种更为巧妙的方法,它利用了异或的性质,相同的数字异或会变为0,而0与任何数字异或都不会变化。
我们将1到n的数字与给定的数组中的数字全部异或起来,最后得到的结果就是缺失的数字。
def findMissingNumber(arr):
n = len(arr) + 1
res = 0
for i in range(1, n+1):
res ^= i
for num in arr:
res ^= num
return res
以上两种方法时间复杂度均为O(n),但是求和法需要用到乘法和除法,可能会导致数据溢出。而异或法则较为简单,不会出现溢出现象。
如果您有其他更好的解法,欢迎在评论区分享!