Given a sorted array arr[] of N integers, The task is to find the multiple missing elements in the array between the ranges [arr[0], arr[N-1]].
Examples:
Input: arr[] = {6, 7, 10, 11, 13}
Output: 8 9 12
Explanation:
The elements of the array are present in the range of the maximum and minimum array element [6, 13]. Therefore, the total values will be {6, 7, 8, 9, 10, 11, 12, 13}.
The elements from the above range which are missing from the array are {8, 9, 12}.
Input: arr[] = {1, 2, 4, 6}
Output: 3 5
Naive Approach: The naive idea is to iterate over the difference between the consecutive pair of elements and the print all the numbers in this range if the difference is non-zero. Below are the steps:
- Initialize the variable diff which is equal to arr[0] – 0.
- Now traverse the array and see if the difference between arr[i] – i and diff is zero or not.
- If the difference is not equal to zero in the above steps, then the missing element is found.
- To find the multiple missing elements run a loop inside it and see if the diff is less than arr[i] – i then print the missing element i.e., i + diff.
- Now increment the diff as the difference is increased now.
- Repeat from step 2 until all the missing numbers are not found.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void printMissingElements( int arr[], int N)
{
int diff = arr[0] - 0;
for ( int i = 0; i < N; i++) {
if (arr[i] - i != diff) {
while (diff < arr[i] - i) {
cout << i + diff << " " ;
diff++;
}
}
}
}
int main()
{
int arr[] = { 6, 7, 10, 11, 13 };
int N = sizeof (arr) / sizeof ( int );
printMissingElements(arr, N);
return 0;
}
|
Java
import java.util.*;
class GFG{
static void printMissingElements( int arr[],
int N)
{
int diff = arr[ 0 ] - 0 ;
for ( int i = 0 ; i < N; i++)
{
if (arr[i] - i != diff)
{
while (diff < arr[i] - i)
{
System.out.print((i + diff) + " " );
diff++;
}
}
}
}
public static void main (String[] args)
{
int arr[] = { 6 , 7 , 10 , 11 , 13 };
int N = arr.length;
printMissingElements(arr, N);
}
}
|
Python3
def printMissingElements(arr, N):
diff = arr[ 0 ]
for i in range (N):
if (arr[i] - i ! = diff):
while (diff < arr[i] - i):
print (i + diff, end = " " )
diff + = 1
arr = [ 6 , 7 , 10 , 11 , 13 ]
N = len (arr)
printMissingElements(arr, N)
|
C#
using System;
class GFG{
static void printMissingElements( int [] arr,
int N)
{
int diff = arr[0] - 0;
for ( int i = 0; i < N; i++)
{
if (arr[i] - i != diff)
{
while (diff < arr[i] - i)
{
Console.Write(i + diff + " " );
diff++;
}
}
}
}
static void Main()
{
int [] arr = { 6, 7, 10, 11, 13 };
int N = arr.Length;
printMissingElements(arr, N);
}
}
|
Javascript
<script>
function prletMissingElements(arr, N)
{
let diff = arr[0] - 0;
for (let i = 0; i < N; i++)
{
if (arr[i] - i != diff)
{
while (diff < arr[i] - i)
{
document.write((i + diff) + " " );
diff++;
}
}
}
}
let arr = [ 6, 7, 10, 11, 13 ];
let N = arr.length;
prletMissingElements(arr, N);
</script>
|
Time Complexity: O(N2)
Auxiliary Space: O(1)
Efficient Approach: The idea is to use Hashing to optimize the above approach. Create a boolean array(say b[]) of size equal to the maximum element in the array and mark only those positions in the array b[] which are present in the given array. Print all the index in the array b[] that are not marked.
Below are the steps:
- Initialize a boolean array b[] with zero of size equals to the maximum element of the array.
- Iterate over the given array and mark for each element in the given array mark that index as true in the array b[].
- Now traverse the given array b[] from index arr[0] and print those index whose value is false as they are the element that is missing in the given array.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void printMissingElements( int arr[], int N)
{
int b[arr[N - 1] + 1] = { 0 };
for ( int i = 0; i < N; i++) {
b[arr[i]] = 1;
}
for ( int i = arr[0]; i <= arr[N - 1]; i++) {
if (b[i] == 0) {
cout << i << " " ;
}
}
}
int main()
{
int arr[] = { 6, 7, 10, 11, 13 };
int N = sizeof (arr) / sizeof ( int );
printMissingElements(arr, N);
return 0;
}
|
Java
import java.util.*;
class GFG{
static void printMissingElements( int arr[],
int N)
{
int [] b = new int [arr[N - 1 ] + 1 ];
for ( int i = 0 ; i < N; i++)
{
b[arr[i]] = 1 ;
}
for ( int i = arr[ 0 ]; i <= arr[N - 1 ]; i++)
{
if (b[i] == 0 )
{
System.out.print(i + " " );
}
}
}
public static void main (String[] args)
{
int arr[] = { 6 , 7 , 10 , 11 , 13 };
int N = arr.length;
printMissingElements(arr, N);
}
}
|
Python3
def printMissingElements(arr, N):
b = [ 0 ] * (arr[N - 1 ] + 1 )
for i in range (N):
b[arr[i]] = 1
for i in range (arr[ 0 ], arr[N - 1 ] + 1 ):
if (b[i] = = 0 ):
print (i, end = " " )
arr = [ 6 , 7 , 10 , 11 , 13 ]
N = len (arr)
printMissingElements(arr, N)
|
C#
using System;
class GFG{
static void printMissingElements( int []arr,
int N)
{
int [] b = new int [arr[N - 1] + 1];
for ( int i = 0; i < N; i++)
{
b[arr[i]] = 1;
}
for ( int i = arr[0]; i <= arr[N - 1];
i++)
{
if (b[i] == 0)
{
Console.Write(i + " " );
}
}
}
public static void Main(String[] args)
{
int []arr = {6, 7, 10, 11, 13};
int N = arr.Length;
printMissingElements(arr, N);
}
}
|
Javascript
<script>
function printMissingElements(arr, N)
{
let b = new Uint8Array(arr[N - 1] + 1);
for (let i = 0; i < N; i++) {
b[arr[i]] = 1;
}
for (let i = arr[0]; i <= arr[N - 1]; i++) {
if (b[i] == 0) {
document.write( i + " " );
}
}
}
let arr = [ 6, 7, 10, 11, 13 ];
let N = arr.length;
printMissingElements(arr, N);
</script>
|
Time Complexity: O(M), where M is the maximum element of the array.
Auxiliary Space: O(M)
Most Efficient And Simple Approach:
In below approach simple we create a variable (cnt) this variable keeps the track of element present in array
1. We need to traverse the arr[0] to arr[N] to find missing number between it.
2. In for loop if arr[cnt] match to current element then we do not print that element and skip that element because it is present in array
once we found element then we increment the cnt++ for pointing next element in array
3. In else part we just print the element which does not match or present in array
C++
#include <bits/stdc++.h>
using namespace std;
void printMissingElements( int arr[], int N)
{
int cnt = 0;
for ( int i = arr[0]; i <= arr[N - 1]; i++) {
if (arr[cnt] == i) {
cnt++;
}
else {
cout << i << " " ;
}
}
}
int main()
{
int arr[] = { 6, 7, 10, 11, 13 };
int N = sizeof (arr) / sizeof (arr[0]);
printMissingElements(arr, N);
return 0;
}
|
Java
import java.io.*;
class GFG {
public static void printMissingElements( int arr[], int N)
{
int cnt = 0 ;
for ( int i = arr[ 0 ]; i <= arr[N - 1 ]; i++)
{
if (arr[cnt] == i)
{
cnt++;
}
else
{
System.out.print(i + " " );
}
}
}
public static void main (String[] args)
{
int arr[] = { 6 , 7 , 10 , 11 , 13 };
int N = arr.length;
printMissingElements(arr, N);
}
}
|
Python3
def printMissingElements(arr, N):
cnt = 0
for i in range (arr[ 0 ], arr[N - 1 ] + 1 ):
if (arr[cnt] = = i):
cnt + = 1
else :
print (i , end = " " )
arr = [ 6 , 7 , 10 , 11 , 13 ]
N = len (arr)
printMissingElements(arr, N)
|
C#
using System;
using System.Linq;
public class GFG{
public static void printMissingElements( int [] arr, int N)
{
int cnt = 0;
for ( int i = arr[0]; i <= arr[N - 1]; i++)
{
if (arr[cnt] == i)
{
cnt++;
}
else
{
Console.Write(i + " " );
}
}
}
static public void Main ()
{
int [] arr = { 6, 7, 10, 11, 13 };
int N = arr.Length;
printMissingElements(arr, N);
}
}
|
Javascript
<script>
function printMissingElements(arr, N)
{
var cnt = 0;
for ( var i = arr[0]; i <= arr[N - 1]; i++) {
if (arr[cnt] == i)
{
cnt++;
}
else
{
document.write(i + " " );
}
}
}
var arr = [ 6, 7, 10, 11, 13 ];
var N = arr.length;
printMissingElements(arr, N);
</script>
|
Time Complexity: O(N), where N is the maximum element of the array.
Auxiliary Space: O(1) Because of this method the overflow of hash or extra space will be saved.
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
08 Feb, 2022
Like Article
Save Article