7-5 sdut-array1-3 显示缺失的数java
时间: 2025-04-07 22:17:10 浏览: 61
### Java 实现检测数组中缺失的数字
要通过 Java 程序实现检测数组中的缺失数字,可以采用多种方法。以下是基于排序法和求和公式的两种常见解决方案。
#### 方法一:利用排序法
此方法的核心思想是对数组进行排序后逐一比较相邻元素之间的差值是否为 1。如果发现某两个相邻元素之间相差超过 1,则说明中间有缺失的数字[^2]。
```java
import java.util.Arrays;
public class MissingNumberFinder {
public static void main(String[] args) {
int[] array = {3, 7, 1, 2, 8, 4, 5};
// 对数组进行排序
Arrays.sort(array);
// 遍历已排序数组并查找缺失的数字
for (int i = 0; i < array.length - 1; i++) {
if (array[i + 1] != array[i] + 1 && array[i + 1] != array[i]) {
System.out.println("Missing number is: " + (array[i] + 1));
}
}
}
}
```
这种方法的时间复杂度主要由排序决定,即 O(n log n)。
---
#### 方法二:利用高斯求和公式
对于从 1 到 N 的连续整数序列,其总和可以通过高斯求和公式计算得出 \( S = \frac{N(N+1)}{2} \)。实际数组的总和与理论总和之差即是缺失的数字[^1]。
```java
public class MissingNumberGaussFormula {
public static void main(String[] args) {
int[] array = {1, 2, 4, 5, 6, 7, 8, 9, 10};
int n = array.length + 1;
int expectedSum = n * (n + 1) / 2; // 计算理论上完整的总和
int actualSum = 0;
for (int num : array) {
actualSum += num; // 计算当前数组的实际总和
}
int missingNumber = expectedSum - actualSum; // 找出差异部分
System.out.println("The missing number is: " + missingNumber);
}
}
```
上述代码的时间复杂度仅为 O(n),因为只需要遍历一次数组即可完成操作。
---
#### 性能对比分析
- **排序法**适合处理未指定范围的大规模数据集,但时间复杂度较高。
- **高斯求和法**适用于知道确切数值范围的情况(如题目限定在 1 至 10 或者 1 至 100),效率更高且简单易懂。
无论哪种方式都可以有效解决问题,具体选用取决于实际情况以及输入条件的特点。
阅读全文
相关推荐
















