Description
You are given an integer array nums consisting of unique integers.
Originally, nums contained every integer within a certain range. However, some integers might have gone missing from the array.
The smallest and largest integers of the original range are still present in nums.
Return a sorted list of all the missing integers in this range. If no integers are missing, return an empty list.
Example 1:
Input: nums = [1,4,2,5]
Output: [3]
Explanation:
The smallest integer is 1 and the largest is 5, so the full range should be [1,2,3,4,5]. Among these, only 3 is missing.
Example 2:
Input: nums = [7,8,6,9]
Output: []
Explanation:
The smallest integer is 6 and the largest is 9, so the full range is [6,7,8,9]. All integers are already present, so no integer is missing.
Example 3:
Input: nums = [5,1]
Output: [2,3,4]
Explanation:
The smallest integer is 1 and the largest is 5, so the full range should be [1,2,3,4,5]. The missing integers are 2, 3, and 4.
Constraints:
2 <= nums.length <= 1001 <= nums[i] <= 100
Solutions
This is a refinement of the sort-based approach to finding missing numbers. After sorting nums in ascending order with nums.sort((a, b) => a - b), it scans each pair of adjacent elements but adds an explicit guard check: only when the difference nums[i + 1] - nums[i] is greater than 1 does a gap actually exist. When that's true, the inner loop pushes every integer strictly between the two neighbors into res. The if check skips consecutive or duplicate values without even starting the inner loop, making the intent clearer — collect only the numbers hiding in the gaps of the sorted sequence.
/**
* @param {number[]} nums
* @return {number[]}
*/
var findMissingElements = function(nums) {
nums.sort((a, b) => a - b);
const res = [];
for (let i = 0; i < nums.length - 1; i++) {
if (nums[i + 1] - nums[i] > 1) {
for (let j = nums[i] + 1; j < nums[i + 1]; j++) {
res.push(j);
}
}
}
return res;
};