用java 出缺失的数字 定一个包含从1到N(不重复)的N个整数的一维数组,其中一个数字缺失。编写一个程序,找到缺失的数字并返回。例如: int[] array ={1, 2,4,5,6,7};输出为3。
时间: 2024-09-11 12:06:32 浏览: 79
在Java中,可以使用一种称为“差分数组”的技巧来解决这个问题。首先,创建一个新的数组,其中元素是原数组相邻元素的差值。因为原始数组已经按升序排列并且只有一个数字缺失,所以这个差分数组中会有一个连续的负数,代表缺失的那个数字。然后遍历差分数组找到第一个负数的位置,即可计算出缺失的数字。
以下是具体的实现步骤:
1. 创建一个与原始数组长度相同的差分数组。
2. 遍历原数组,计算每个位置的差值并存储在差分数组对应位置。
3. 初始化两个变量,一个表示当前的累计差值,另一个表示上一个位置的累计差值,初始均为0。
4. 遍历差分数组,如果遇到累积差值小于0,说明之前积累的是一个完整的递增序列,而此时的累积差值是缺失数字减去上一个数的结果,因此通过累积差值加上1得到缺失数字。
5. 返回缺失数字。
这里是代码实现:
```java
public int findMissingNumber(int[] nums) {
int n = nums.length + 1;
int[] diffArray = new int[n];
for (int i = 0; i < n; i++) {
if (i < nums.length)
diffArray[i] = nums[i] - (i == 0 ? 0 : nums[i - 1]);
else
diffArray[i] = i;
}
int cumulativeDifference = 0;
for (int i = 0; i < n; i++) {
cumulativeDifference += diffArray[i];
if (cumulativeDifference < 0) {
cumulativeDifference++;
return cumulativeDifference;
}
}
throw new IllegalArgumentException("Invalid input: All numbers from 1 to N should be present");
}
// 示例
int[] array = {1, 2, 4, 5, 6, 7};
System.out.println(findMissingNumber(array)); // 输出:3
```
阅读全文