Open In App

Find all numbers in range [1, N] that are not present in given Array

Improve
Improve
Like Article
Like
Save
Share
Report

Given an array arr[] of size N, where arr[i] is natural numbers less than or equal to N, the task is to find all the numbers in the range [1, N] that are not present in the given array.

Examples:

Input: arr[ ] = {5, 5, 4, 4, 2}
Output: 1 3
Explanation: 
For all numbers in the range [1, 5], 1 and 3 are not present in the array.

Input: arr[ ] = {3, 2, 3, 1}
Output: 4

Naive Approach: The simplest approach is to hash every array element using any data structure like the dictionary and then iterate over the range [1, N] and print all numbers not present in the hash.

d
 

Time Complexity: O(N)
Auxiliary Space: O(N)

 

Approach: The above approach can be optimized further by marking the number at position arr[i] – 1, negative to mark i is present in the array. Then print all positions of the array elements that are positive as they are missing. Follow the steps below to solve the problem:

 

 

Below is the implementation of the above approach:

 

C++




// C++ program for above approach
#include <iostream>
using namespace std;
  
// Function to find the missing numbers
void getMissingNumbers(int arr[], int N)
{
    // traverse the array arr[]
    for (int i = 0; i < N; i++) {
        // Update
        arr[abs(arr[i]) - 1] = -(abs(arr[abs(arr[i]) - 1]));
    }
    // Traverse the array arr[]
    for (int i = 0; i < N; i++) {
        // If Num is not present
        if (arr[i] > 0)
            cout << i + 1 << " ";
    }
}
  
// Driver Code
int main()
{
  
    // Given Input
    int N = 5;
    int arr[] = { 5, 5, 4, 4, 2 };
  
    // Function Call
    getMissingNumbers(arr, N);
    return 0;
}
// This codeis contributed by dwivediyash


Java




// Java program for the above approach
import java.io.*;
  
class GFG 
{
    
    // Function to find the missing numbers
    static void getMissingNumbers(int arr[], int N)
    {
        
        // traverse the array arr[]
        for (int i = 0; i < N; i++) 
        {
            
            // Update
            arr[(Math.abs(arr[i]) - 1)]
                = -(Math.abs(arr[(Math.abs(arr[i]) - 1)]));
        }
        
        // Traverse the array arr[]
        for (int i = 0; i < N; i++) 
        {
            
            // If Num is not present
            if (arr[i] > 0)
                System.out.print(i + 1 + " ");
        }
    }
  
    // Driver Code
    public static void main(String[] args)
    {
        
        // Given Input
        int N = 5;
        int arr[] = { 5, 5, 4, 4, 2 };
  
        // Function Call
        getMissingNumbers(arr, N);
    }
}
  
// This code is contributed by Potta Lokesh


Python3




# Python program for the above approach
  
# Function to find the missing numbers
def getMissingNumbers(arr):
  
    # Traverse the array arr[]
    for num in arr:
  
        # Update
        arr[abs(num)-1] = -(abs(arr[abs(num)-1]))
  
    # Traverse the array arr[]
    for pos, num in enumerate(arr):
  
        # If Num is not present
        if num > 0:
            print(pos + 1, end =' ')
  
  
# Given Input
arr = [5, 5, 4, 4, 2]
  
# Function Call
getMissingNumbers(arr)


C#




// C# program for above approach
using System;
using System.Collections.Generic;
  
class GFG{
  
// Function to find the missing numbers
static void getMissingNumbers(int []arr, int N)
{
    
    // traverse the array arr[]
    for (int i = 0; i < N; i++) 
    {
        
        // Update
        arr[(Math.Abs(arr[i]) - 1)] = -(Math.Abs(arr[(Math.Abs(arr[i]) - 1)]));
    }
    
    // Traverse the array arr[]
    for (int i = 0; i < N; i++)
    {
        
        // If Num is not present
        if (arr[i] > 0)
          Console.Write(i + 1 + " ");
    }
}
  
// Driver Code
public static void Main()
{
  
    // Given Input
    int N = 5;
    int []arr = { 5, 5, 4, 4, 2 };
  
    // Function Call
    getMissingNumbers(arr, N);
}
}
  
// This code is contributed by ipg2016107.


Javascript




<script>
// Javascript program for the above approach
  
// Function to find the missing numbers
function getMissingNumbers(arr){
  
    // Traverse the array arr[]
    for(let num of arr)
        // Update
        arr[(Math.abs(num)-1)] = -(Math.abs(arr[(Math.abs(num)-1)]))
  
    // Traverse the array arr[]
    for (pos in arr)
  
        // If Num is not present
        if(arr[pos] > 0)
            document.write(`${parseInt(pos) + 1} `)
}
  
// Given Input
let arr = [5, 5, 4, 4, 2]
  
// Function Call
getMissingNumbers(arr)
  
// This code is contributed by _saurabh_jaiswal.
</script>


Output

1 3 

Time Complexity: O(N)
Auxiliary Space: O(1)



Last Updated : 24 Mar, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads