目标
给你一个整数数组 nums ,数组由若干 互不相同 的整数组成。
数组 nums 原本包含了某个范围内的 所有整数 。但现在,其中可能 缺失 部分整数。
该范围内的 最小 整数和 最大 整数仍然存在于 nums 中。
返回一个 有序 列表,包含该范围内缺失的所有整数,并 按从小到大排序。如果没有缺失的整数,返回一个 空 列表。
示例 1:
输入: nums = [1,4,2,5]
输出: [3]
解释:
最小整数为 1,最大整数为 5,因此完整的范围应为 [1,2,3,4,5]。其中只有 3 缺失。
示例 2:
输入: nums = [7,8,6,9]
输出: []
解释:
最小整数为 6,最大整数为 9,因此完整的范围为 [6,7,8,9]。所有整数均已存在,因此没有缺失的整数。
示例 3:
输入: nums = [5,1]
输出: [2,3,4]
解释:
最小整数为 1,最大整数为 5,因此完整的范围应为 [1,2,3,4,5]。缺失的整数为 2、3 和 4。
说明:
- 2 <= nums.length <= 100
- 1 <= nums[i] <= 100
思路
有一个元素互不相同的数组,原本包含了 [min, max] 之间的所有整数,现在缺失了 (min, max) 中的一些元素,找到并返回缺失的元素。
首先找到数组的 min 与 max,将元素放入哈希表,遍历 (min, max) 判断数字是否在集合中。
代码
/**
* @date 2026-08-04 8:49
*/
public class FindMissingElements3731 {
public List<Integer> findMissingElements(int[] nums) {
int min = 101, max = 0;
Set<Integer> set = new HashSet<>();
for (int num : nums) {
min = Math.min(min, num);
max = Math.max(max, num);
set.add(num);
}
List<Integer> res = new ArrayList<>();
for (int i = min + 1; i < max; i++) {
if (!set.contains(i)) {
res.add(i);
}
}
return res;
}
}
性能











