Missing in Array Problem in Java

2025年5月3日 | 阅读3分钟

数组中缺失数字 问题是编码面试中经常遇到的问题。这个问题涉及到从包含 n 个不同整数(范围在 1 到 n+1 之间)的数组中找出缺失的数字。因此,在这个范围内只有一个数字需要尽快找到。

在本节中,我们将介绍解决此问题的两种主要方法:我们还有求和公式法异或法。

问题陈述

设 a[] 是一个 数组,其中整数范围为 1 到 n+1,但数组 A 中的所有整数都是唯一的,并且数组的大小为 n。这意味着在数字 1, 2, 3 ……(n+1)中只有一个数字丢失。例如,如果数组是

如果我们查看此数组整数的范围,我们会发现 3 在 [1, 6] 范围内丢失。

问题解决方案

有多种方法可以解决此问题,但在这里,我们关注两种高效的方法,它们可以在线性时间内工作:为了解决加法问题,使用了以下方法。

使用求和公式法

前 n 个 自然数 的和的计算公式为

对于这个问题,由于范围是 [1, n+1],我们调整公式来计算从 1 到 n+1 的数字之和

找出缺失的数字

  1. 使用上述公式找出从 1 到 n+1 的数字之和。
  2. 将给定列表中的所有项相加。
  3. 使用两指针法时,将数组的和与从 1 到 n+1 的和相减,即可得到所需的缺失数字。

文件名:MissingNumber.java

输出

 
Missing number is: 3   

使用异或运算

异或法是另一种有效的技术。异或(XOR)是一种按位运算,其中

其概念是,数组中的所有数字都必须与从 1 到 n+1 的所有数字进行异或运算。由于每当遇到两个相同的元素时,它们就会变为零,因此在异或格式的操作后,只有缺失的数字会保留下来。

请按照以下步骤解决此问题

  1. 用从 1 到 n+1 的所有数字填充一个集合,并将它们全部进行异或运算。
  2. 将此结果与数组中的所有元素进行异或运算。
  3. 由于所有异或运算都将执行,每次运算的结果都将是缺失的数字。

文件名:MissingNumberXOR.java

输出

 
Missing number is: 3   

结论

数组中缺失数字问题与预先构建的读取数组问题密切相关,可以通过求和公式法或异或法非常有效地解决。这两种方法都具有线**性时间**和**常数空间**复杂度,是最佳选择。

求和公式很容易理解,异或法也一样,但后者 方法 非常巧妙。它们都 universally useful,并且是轻松快速解决数组中存在间隙的场景的绝佳资源。


下一个主题int vs Integer Java