Java Program to Find the Missing Element in a Given Permutation

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

任务是确定给定序列中缺失的数字。该数组将包含此范围内的所有数字,但会遗漏一个。

查找缺失数字的方法

朴素方法:使用哈希

这种方法涉及创建一个辅助数组(hashArray)来跟踪输入数组中每个元素的频率。此辅助数组中频率为 0 的元素就是缺失的数字。

算法

  1. 创建一个大小为 N+1 的辅助数组(hashArray),并将其初始化为零。
  2. 遍历输入数组 nums[] 并递增辅助数组中相应的索引。
  3. 辅助数组中值为 0 的索引就是缺失的数字。

让我们在 Java 程序中实现上述算法。

示例

输出

 
4   

解释

在上述程序中,输入数组中每个数字的频率存储在大小为 N+1 的辅助数组(hash)中。当我们在输入数组中迭代时,我们会递增 hash 数组中匹配索引处的值。

我们首先填充频率数组,然后搜索 hash 数组中未变为零的索引。由于这表明范围 [1, N] 中的匹配数字未出现在输入数组中,因此该索引表示缺失的数字。

高效方法:使用求和公式

这种方法利用了前 N 个自然数的求和公式

通过从总和中减去数组元素的总和,我们将得到缺失的数字。

示例

输出

 
4   

解释

首先,使用公式获取 [1, N] 范围的总和。接下来,计算输入数组的元素总数。这两个总和之间的差值代表了数组本应存在的数字,但未在数组中找到。

高效方法:使用异或运算

当一个数字与其自身进行异或运算时,结果为 0;当一个数字与 0 进行异或运算时,结果是数字本身。

示例

输出

 
4   

解释

要获得 xorTotal,首先将 1 到 N 的每个数字进行异或运算。通过对输入数组中的每个元素进行异或运算来获取 xorArray。通过对 xorTotal 和 xorArray 进行异或运算,您可以找到缺失的数字。所有其他数字都会被抵消,只剩下缺失的数字。

结论

朴素方法涉及使用辅助数组,而更有效的方法使用求和公式或异或运算。后一种方法因其 O(1) 空间复杂度和简单的实现而更受青睐,使其适用于更大的数据集。


下一个主题Java Xmx