给你一个整数数组 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 <= 1001 <= nums[i] <= 100
苯人思路
将排好序的 nums 和范围内所有整数构成的数组 mid 元素一一比较
若访问到 nums 的元素和 mid 的元素不一致(即 nums 缺失该元素),则把该元素加入到 answer 数组中
cpp
class Solution {
public:
vector<int> findMissingElements(vector<int>& nums) {
int n = nums.size();
sort(nums.begin(), nums.end());
int min = nums[0];
int max = nums[n-1];
int offset = max-min+1;
if(n==offset) return {};
vector<int> mid(offset);
iota(mid.begin(), mid.begin()+offset, min);
vector<int> answer;
int i=0, j=0;
while(j<offset){
if(nums[i]!=mid[j]){
answer.emplace_back(mid[j]);
j++;
}
else{
i++;
j++;
}
}
return answer;
}
};