Find All Numbers Disappeared in an Array

Updated on 26 May, 2025
Find All Numbers Disappeared in an Array header image

Problem Statement

In this problem, you are provided with an array nums containing n integers. Each integer in the array is guaranteed to be within the range from 1 to n, where n is the length of the array. The task is to identify and return all the integers within this range [1, n] that are not present in the array nums. These missing numbers need to be collected and returned in an array format.

Examples

Example 1

Input:

nums = [4,3,2,7,8,2,3,1]

Output:

[5,6]

Example 2

Input:

nums = [1,1]

Output:

[2]

Constraints

  • n == nums.length
  • 1 <= n <= 105
  • 1 <= nums[i] <= n

Approach and Intuition

The goal is to find the numbers missing from the consecutive range [1, n] in the given array nums. Here's a breakdown of the methodology:

  1. Use of Data Structure:

    • A simple Boolean array could be utilized to track which numbers are present in the array. The index can represent each number from 1 to n, and the truth value at each index can reflect the presence or absence of that number in nums.
  2. Scan Through nums:

    • Iterate through each number in the nums array. For each number, mark its corresponding position (number as index) in the Boolean array as True or any other marker indicating its presence.
  3. Identify Missing Numbers:

    • After marking the presence of numbers from nums, iterate through the Boolean array from 1 to n. Collect indices where the value is still False (or unmarked). These indices represent the numbers that are missing from nums.
  4. Edge Cases:

    • If nums includes every number from 1 to n, the resulting list of missing numbers would be empty.
    • For smaller arrays or arrays with repeated numbers (e.g., [1,1]), this method effectively captures the missing numbers without needing multiple passes or additional space for counting.

This approach is space-efficient because it leverages information about the problem constraints such as the specific range of numbers and their count's relationship to the array's length (i.e., n equals the length of nums). This positions the solution to operate efficiently even as n reaches larger values up to the upper constraint limit.

Solutions

  • Java
java
class Solution {
    public List<Integer> getMissingNumbers(int[] arr) {
        for (int index = 0; index < arr.length; index++) {
            int targetIndex = Math.abs(arr[index]) - 1;
            if (arr[targetIndex] > 0) {
                arr[targetIndex] = -arr[targetIndex];
            }
        }

        List<Integer> missingNumbers = new ArrayList<Integer>();
        for (int k = 1; k <= arr.length; k++) {
            if (arr[k - 1] > 0) {
                missingNumbers.add(k);
            }
        }
        
        return missingNumbers;
    }
}

This solution in Java identifies all numbers missing in a given array ranging from 1 to N, where N is the array's length. The approach efficiently uses the concept of marking visited indices rather than using additional space for counting or hash mapping.

  • Initialize the process by iterating through each number in the array. For each number, compute its target index based on its value.
  • Verify if the element at the target index is positive. If it is, negate the number at this index as a mark that the number corresponding to this index has appeared in the array.
  • After marking the array, commence another loop ranging from 1 to N to determine which indices were not marked. The indices that retain a positive value imply their corresponding values were missing in the original array.
  • Collect and return these missing numbers.

The function implements two major loops, both running in linear time, i.e., O(N), thus ensuring efficiency with a space complexity of O(1), excluding the space required for the output list. This makes it an in-place algorithm, leveraging the input array itself for tracking purposes. Ensure to handle numbers and index calculations accurately to avoid out-of-bound errors.

Comments

No comments yet.