给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间[1,n]内。请你找 出所有在[1,n]范围内但没有出现在nums 中的数字,并以数组的形式返回结果 用Java实现(新手代码)
时间: 2024-11-22 14:39:53 浏览: 13
C#版本的一维数组的动态和
在Java中,你可以使用HashSet数据结构来解决这个问题。HashSet可以快速地判断一个元素是否存在于集合中,非常适合用来找出不在给定数组中的数字。下面是一个简单的Java新手级别的解决方案:
```java
import java.util.HashSet;
public class Solution {
public int[] findDisappearedNumbers(int[] nums) {
// 创建一个HashSet用于存储已知的数字
HashSet<Integer> knownNums = new HashSet<>();
// 遍历输入数组,将每个元素添加到HashSet中
for (int num : nums) {
if (num <= nums.length) { // 确保范围内的数字才添加
knownNums.add(num);
}
}
// 创建一个新的数组来存储未找到的数字
int[] result = new int[nums.length];
int index = 0; // 结果数组的索引
// 使用循环遍历从1到n的范围,如果数字不在knownNums中,则添加到结果数组
for (int i = 1; i <= nums.length; i++) {
if (!knownNums.contains(i)) {
result[index++] = i;
}
}
// 如果结果数组还没有填满,说明有超出数组范围的数字
while (index < result.length) {
result[index++] = nums.length + 1; // 添加最大值加一,表示不存在的数字
}
return result;
}
}
```
在这个代码中,我们首先通过遍历`nums`数组并添加元素到HashSet中,然后检查从1到`nums.length`范围内的每个数字是否在HashSet中。如果没有,就将其添加到结果数组中。最后,如果有剩余的空间,我们将范围外的最大值加一作为不存在的数字。
阅读全文