Find first k natural numbers missing in given array
Given an array of size n and a number k, we need to print first k natural numbers that are not there in the given array.
Examples:
Input : [2 3 4] k = 3 Output : [1 5 6] Input : [-2 -3 4] k = 2 Output : [1 2]
- Sort the given array.
- After sorting, we find the position of the first positive number in the array.
- Now we traverse the array and keep printing elements in gaps between two consecutive array elements.
- If gaps don’t cover k missing numbers, we print numbers greater than the largest array element.
Implementation:
C++
// C++ program to find missing k numbers // in an array. #include <bits/stdc++.h> using namespace std; // Prints first k natural numbers in // arr[0..n-1] void printKMissing( int arr[], int n, int k) { sort(arr, arr + n); // Find first positive number int i = 0; while (i < n && arr[i] <= 0) i++; // Now find missing numbers // between array elements int count = 0, curr = 1; while (count < k && i < n) { if (arr[i] != curr) { cout << curr << " " ; count++; } else i++; curr++; } // Find missing numbers after // maximum. while (count < k) { cout << curr << " " ; curr++; count++; } } // Driver code int main() { int arr[] = { 2, 3, 4 }; int n = sizeof (arr) / sizeof (arr[0]); int k = 3; printKMissing(arr, n, k); return 0; } |
Java
// Java program to find missing k numbers // in an array. import java.util.Arrays; class GFG { // Prints first k natural numbers in // arr[0..n-1] static void printKMissing( int [] arr, int n, int k) { Arrays.sort(arr); // Find first positive number int i = 0 ; while (i < n && arr[i] <= 0 ) i++; // Now find missing numbers // between array elements int count = 0 , curr = 1 ; while (count < k && i < n) { if (arr[i] != curr) { System.out.print(curr + " " ); count++; } else i++; curr++; } // Find missing numbers after // maximum. while (count < k) { System.out.print(curr + " " ); curr++; count++; } } // Driver code public static void main(String[] args) { int [] arr = { 2 , 3 , 4 }; int n = arr.length; int k = 3 ; printKMissing(arr, n, k); } } /* This code is contributed by Mr. Somesh Awasthi */ |
Python3
# Python3 program to find missing # k numbers in an array. # Prints first k natural numbers # in arr[0..n-1] def printKMissing(arr, n, k) : arr.sort() # Find first positive number i = 0 while (i < n and arr[i] < = 0 ) : i = i + 1 # Now find missing numbers # between array elements count = 0 curr = 1 while (count < k and i < n) : if (arr[i] ! = curr) : print ( str (curr) + " " , end = '') count = count + 1 else : i = i + 1 curr = curr + 1 # Find missing numbers after # maximum. while (count < k) : print ( str (curr) + " " , end = '') curr = curr + 1 count = count + 1 # Driver code arr = [ 2 , 3 , 4 ] n = len (arr) k = 3 printKMissing(arr, n, k); # This code is contributed # by Yatin Gupta |
C#
// C# program to find missing // k numbers in an array. using System; class GFG { // Prints first k natural numbers // in arr[0..n-1] static void printKMissing( int [] arr, int n, int k) { Array.Sort(arr); // Find first positive number int i = 0; while (i < n && arr[i] <= 0) i++; // Now find missing numbers // between array elements int count = 0, curr = 1; while (count < k && i < n) { if (arr[i] != curr) { Console.Write(curr + " " ); count++; } else i++; curr++; } // Find missing numbers // after maximum. while (count < k) { Console.Write(curr + " " ); curr++; count++; } } // Driver code public static void Main() { int [] arr = {2, 3, 4}; int n = arr.Length; int k = 3; printKMissing(arr, n, k); } } // This code is contributed by Nitin Mittal |
PHP
<?php // PHP program to find missing k numbers // in an array. // Prints first k natural numbers in // arr[0..n-1] function printKMissing( $arr , $n , $k ) { sort( $arr ); sort( $arr , $n ); // Find first positive number $i = 0; while ( $i < $n && $arr [ $i ] <= 0) $i ++; // Now find missing numbers // between array elements $count = 0; $curr = 1; while ( $count < $k && $i < $n ) { if ( $arr [ $i ] != $curr ) { echo $curr , " " ; $count ++; } else $i ++; $curr ++; } // Find missing numbers after // maximum. while ( $count < $k ) { echo $curr , " " ; $curr ++; $count ++; } } // Driver code $arr = array ( 2, 3, 4 ); $n = sizeof( $arr ); $k = 3; printKMissing( $arr , $n , $k ); // This code is contributed by Nitin Mittal. ?> |
Javascript
<script> // JavaScript program to find missing k numbers // in an array. // Prints first k natural numbers in // arr[0..n-1] function printKMissing(arr, n, k) { arr.sort((a, b) => a - b); // Find first positive number let i = 0; while (i < n && arr[i] <= 0) i++; // Now find missing numbers // between array elements let count = 0, curr = 1; while (count < k && i < n) { if (arr[i] != curr) { document.write(curr + " " ); count++; } else i++; curr++; } // Find missing numbers after // maximum. while (count < k) { document.write(curr, " " ); curr++; count++; } } // Driver code let arr = new Array(2, 3, 4); let n = arr.length; let k = 3; printKMissing(arr, n, k); // This code is contributed by gfgking </script> |
Output
1 5 6
Time Complexity: O(n Log n)
Auxiliary Space: O(1)
Alternative Method:
- We can use hashmap to search in O(1) time.
- Use a dictionary to store values in the array.
- We run a loop from 1 to n+k and check whether they are in hashmap.
- If they are not present print the number.
- if all k elements are found break the loop.
Implementation:
C++
// C++ code for // the above approach #include <bits/stdc++.h> using namespace std; // Program to print first k // missing number void printmissingk( int arr[], int n, int k) { // Creating a hashmap map< int , int > d; // Iterate over array for ( int i = 0; i < n; i++) d[arr[i]] = arr[i]; int cnt = 1; int fl = 0; // Iterate to find missing // element for ( int i = 0; i < (n + k); i++) { if (d.find(cnt) == d.end()) { fl += 1; cout << cnt << " " ; if (fl == k) break ; } cnt += 1; } } // Driver Code int main() { int arr[] = {1, 4, 3}; int n = sizeof (arr) / sizeof (arr[0]); int k = 3;; printmissingk(arr, n, k); } // This code is contributed by Chitranayal |
Java
// Java code for // the above approach import java.io.*; import java.util.HashMap; class GFG { // Program to print first k // missing number static void printmissingk( int arr[], int n, int k) { // Creating a hashmap HashMap<Integer, Integer> d = new HashMap<>(); // Iterate over array for ( int i = 0 ; i < n; i++) d.put(arr[i], arr[i]); int cnt = 1 ; int fl = 0 ; // Iterate to find missing // element for ( int i = 0 ; i < (n + k); i++) { if (!d.containsKey(cnt)) { fl += 1 ; System.out.print(cnt + " " ); if (fl == k) break ; } cnt += 1 ; } } // Driver Code public static void main(String[] args) { int arr[] = { 1 , 4 , 3 }; int n = arr.length; int k = 3 ; printmissingk(arr, n, k); } } // This code is contributed by subhammahato348. |
Python3
# Python3 code for above approach # Program to print first k # missing number def printmissingk(arr,n,k): #creating a hashmap d = {} # Iterate over array for i in range ( len (arr)): d[arr[i]] = arr[i] cnt = 1 fl = 0 # Iterate to find missing # element for i in range (n + k): if cnt not in d: fl + = 1 print (cnt,end = " " ) if fl = = k: break cnt + = 1 print () # Driver Code arr = [ 1 , 4 , 3 ] n = len (arr) k = 3 printmissingk(arr,n,k) #This code is contributed by Thirumalai Srinivasan |
C#
// C# code for // the above approach using System; using System.Collections.Generic; public class GFG { // Program to print first k // missing number static void printmissingk( int [] arr, int n, int k) { // Creating a hashmap Dictionary< int , int > d = new Dictionary< int , int >(); // Iterate over array for ( int i = 0; i < n; i++) { d.Add(arr[i], arr[i]); } int cnt = 1; int fl = 0; // Iterate to find missing // element for ( int i = 0; i < (n + k); i++) { if (!d.ContainsKey(cnt)) { fl += 1; Console.Write(cnt + " " ); if (fl == k) break ; } cnt += 1; } } // Driver Code static public void Main (){ int [] arr = { 1, 4, 3 }; int n = arr.Length; int k = 3; printmissingk(arr, n, k); } } // This code is contributed by avanitrachhadiya2155 |
Javascript
<script> // Javascript code for // the above approach // Program to print first k // missing number function printmissingk(arr,n,k) { // Creating a hashmap let d = new Map(); // Iterate over array for (let i = 0; i < n; i++) d.set(arr[i], arr[i]); let cnt = 1; let fl = 0; // Iterate to find missing // element for (let i = 0; i < (n + k); i++) { if (!d.has(cnt)) { fl += 1; document.write(cnt + " " ); if (fl == k) break ; } cnt += 1; } } // Driver Code let arr=[1, 4, 3]; let n = arr.length; let k = 3; printmissingk(arr, n, k); // This code is contributed by ab2127 </script> |
Output
2 5 6
Time complexity: O(n+k)
Auxiliary Space: O(n)
This article is contributed by Biswajit Mohapatra. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.