Find All Numbers Disappeared in an Array II - Solution & Explanation
Practice this problemProblem Statement
You are given an integer array nums and two integers lower and upper.
A missing integer is an integer in the inclusive range [lower, upper] that does not appear in nums.
Return a 2D integer array where each element is of the form [start, end], representing a contiguous range of missing integers. Return the ranges in increasing order. If there are no missing integers, return an empty array.
Note: Consecutive missing integers should be grouped into a single range.
Example 1:
Input: nums = [3,9,7], lower = 1, upper = 12
Output: [[1,2],[4,6],[8,8],[10,12]]
Explanation:
- The missing integers are
[1, 2, 4, 5, 6, 8, 10, 11, 12]. - Grouping the missing integers into the minimum number of contiguous ranges, we get
[1, 2],[4, 6],[8, 8], and[10, 12]. - Therefore, the answer is
[[1, 2], [4, 6], [8, 8], [10, 12]].
Example 2:
Input: nums = [1,1], lower = 5, upper = 7
Output: [[5,7]]
Explanation:
- The missing integers are
[5, 6, 7]. - Grouping the missing integers into the minimum number of contiguous ranges, we get
[5, 7]. - Therefore, the answer is
[[5, 7]].
Example 3:
Input: nums = [2,3,5], lower = 2, upper = 3
Output: []
Explanation:
- There are no missing integers.
- Therefore, the answer is
[].
Constraints:
1 <= nums.length <= 1051 <= nums[i] <= 1051 <= lower <= upper <= 105
Approach Overview
Problem Overview: You receive an array of n integers where each value is between 1 and n. Some numbers appear twice, others once, and some are missing. Your task is to return all numbers from 1 to n that are absent from the array.
Approach 1: Brute Force (O(n²) time, O(1) space)
Check every number from 1 to n by scanning the entire array for each candidate. This uses two nested loops and no extra memory. Prefer only when the array is extremely small or you need a trivial baseline.
Approach 2: Sorting (O(n log n) time, O(1) space)
Sort the array first, then iterate to find gaps between consecutive elements. After sorting, missing numbers are easy to spot by comparing the expected value with the current element. This is a simple solution when you are allowed to modify the input and want to avoid extra memory.
Approach 3: Hash Set (O(n) time, O(n) space)
Insert every element into a hash set, then loop from 1 to n and check which numbers are not present. The set gives O(1) lookups, making the overall time linear. Use this when you can afford extra memory and want the most straightforward linear-time solution.
Approach 4: In-Place Marking (O(n) time, O(1) space)
Iterate through the array and for each value v, mark the index v-1 as negative (or add n) to flag that v exists. Then a second pass collects indices where the value is still positive – those correspond to missing numbers. This is the optimal solution because it uses no extra space beyond the input array and runs in linear time.
Recommended for interviews: Start with the hash set to show you can solve it in O(n) time, then optimize to the in-place marking technique. The brute force shows you understand the problem, but the in-place approach demonstrates deep understanding of array manipulation and constant-space constraints – exactly what interviewers look for.
Related topics: Arrays, Hash Table, Sorting
Solution
We sort nums and then scan it. Let prev be the previous number that appears in [lower, upper], initially lower - 1.
Iterate over the sorted array and skip values outside [lower, upper]. If there is a gap between the current number x and prev, i.e. x - prev > 1, append the missing range [prev + 1, x - 1] to the answer, then set prev to x.
After the scan, if prev < upper, append the trailing range [prev + 1, upper].
The time complexity is O(n times log n) and the space complexity is O(log n), where n is the length of nums.
Code
Python
Java
C++
Go
TypeScript
Detailed Complexity Analysis
| Approach | Time | Space | When to Use |
|---|---|---|---|
| Brute Force | O(n²) | O(1) | Only for tiny arrays or educational baseline |
| Sorting | O(n log n) | O(1) (if in-place sort) | When you can modify the array and want no extra memory |
| Hash Set | O(n) | O(n) | When extra memory is acceptable and you need linear time |
| In-Place Marking | O(n) | O(1) | Optimal for interviews; memory-constrained environments |
Video Solutions (6)
Leetcode : 4031. Find All Numbers Disappeared in an Array II ( Weekly Contest 516 )
Frequently Asked Questions
Is Find All Numbers Disappeared in an Array II easy or hard?
Find All Numbers Disappeared in an Array II Python/Java solution
How to solve Find All Numbers Disappeared in an Array II in O(n)?
What is the best approach for Find All Numbers Disappeared in an Array II?
Is Find All Numbers Disappeared in an Array II asked at Google/Amazon/Meta?
What data structure is used in Find All Numbers Disappeared in an Array II?
What is the time complexity of Find All Numbers Disappeared in an Array II?
Ready to solve this problem?
Practice Find All Numbers Disappeared in an Array II with our built-in code editor and test cases.
Practice on FleetCodeProblem Info
Table of Contents
Practice this problem
Open in Editor