Find the largest number that can be formed with the given digits - GeeksforGeeks

19 Apr, 2022
Given an array of integers arr[] representing digits of a number. The task is to write a program to generate the largest number possible using these digits.Note: The digits in the array are in between 0 and 9. That is, 0<arr[i]<9.Examples:  
Input : arr[] = {4, 7, 9, 2, 3}
Output : Largest number: 97432 

Input : arr[] = {8, 6, 0, 4, 6, 4, 2, 7}
Output : Largest number: 87664420 
 
Naive Approach: The naive approach is to sort the given array of digits in descending order and then form the number using the digits in array keeping the order of digits in the number same as that of the sorted array.Time Complexity: O(N logN), where N is the number of digits.Below is the implementation of above idea:  
C++
Java
Python3
C#
PHP
Javascript
// C++ program to generate largest possible// number with given digits#include <bits/stdc++.h> using namespace std; // Function to generate largest possible// number with given digitsint findMaxNum(int arr[], int n){      // sort the given array in    // descending order    sort(arr, arr+n, greater<int>());         int num = arr[0];         // generate the number    for(int i=1; i<n; i++)    {        num = num*10 + arr[i];    }         return num;} // Driver codeint main(){    int arr[] = {1, 2, 3, 4, 5, 0};         int n = sizeof(arr)/sizeof(arr[0]);         cout<<findMaxNum(arr,n);         return 0;}
// Java program to generate largest// possible number with given digitsimport java.*;import java.util.Arrays; class GFG{// Function to generate largest// possible number with given digitsstatic int findMaxNum(int arr[], int n){    // sort the given array in    // ascending order and then    // traverse into descending    Arrays.sort(arr);         int num = arr[0];         // generate the number    for(int i = n - 1; i >= 0; i--)    {        num = num * 10 + arr[i];    }         return num;} // Driver codepublic static void main(String[] args){    int arr[] = {1, 2, 3, 4, 5, 0};         int n = arr.length;         System.out.println(findMaxNum(arr, n));}} // This code is contributed by mits
# Python3 program to generate largest possible# number with given digits # Function to generate largest possible# number with given digitsdef findMaxNum(arr,n) :     # sort the given array in    # descending order    arr.sort(reverse = True)     # initialize num with starting    # element of an arr    num = arr[0]     # generate the number    for i in range(1,n) :        num = num * 10 + arr[i]     return num # Driver codeif __name__ == "__main__" :         arr = [1,2,3,4,5,0]     n = len(arr)     print(findMaxNum(arr,n))    
// C#  program to generate largest// possible number with given digitsusing System; public class GFG{    // Function to generate largest// possible number with given digitsstatic int findMaxNum(int []arr, int n){    // sort the given array in    // ascending order and then    // traverse into descending    Array.Sort(arr);         int num = arr[0];         // generate the number    for(int i = n - 1; i >= 0; i--)    {        num = num * 10 + arr[i];    }         return num;} // Driver code    static public void Main (){    int []arr = {1, 2, 3, 4, 5, 0};    int n = arr.Length;    Console.WriteLine(findMaxNum(arr, n));}} // This code is contributed by Sachin..
<?php// PHP program to generate// largest possible number// with given digits // Function to generate// largest possible number// with given digitsfunction findMaxNum(&$arr, $n){    // sort the given array    // in descending order    rsort($arr);         $num = $arr[0];         // generate the number    for($i = 1; $i < $n; $i++)    {        $num = $num * 10 + $arr[$i];    }         return $num;} // Driver code$arr = array(1, 2, 3, 4, 5, 0);$n = sizeof($arr);echo findMaxNum($arr,$n); // This code is contributed// by ChitraNayal?>
<script> // Javascript program to generate largest possible// number with given digits // Function to generate largest possible// number with given digitsfunction findMaxNum(arr, n){    // sort the given array in    // descending order    arr.sort(function(a,b){return b-a;});         var num = arr[0];         // generate the number    for(var i=1; i<n; i++)    {        num = num*10 + arr[i];    }         return num;} // Driver codevar arr = [1, 2, 3, 4, 5, 0]; var n = arr.length; document.write(findMaxNum(arr,n)); </script>
543210
 
Efficient Approach: An efficient approach is to observe that we have to form the number using only digits from 0-9. Hence we can create a hash of size 10 to store the number of occurrences of the digits in the given array into the hash table. Where the key in the hash table will be digits from 0 to 9 and their values will be the count of their occurrences in the array.Finally, print the digits the number of times they occur in descending order starting from the digit 9.Below is the implementation of above approach:  
C++
C
Java
Python 3
C#
PHP
Javascript
// C++ program to generate largest possible number with// given digits#include <bits/stdc++.h>using namespace std; // Function to generate largest possible number with given// digitsvoid findMaxNum(int arr[], int n){    // Declare a hash array of size 10 and initialize all    // the elements to zero    int hash[10] = { 0 };     // store the number of occurrences of the digits in the    // given array into the hash table    for (int i = 0; i < n; i++)        hash[arr[i]]++;     // Traverse the hash in descending order to print the    // required number    for (int i = 9; i >= 0; i--)        // Print the number of times a digits occurs        for (int j = 0; j < hash[i]; j++)            cout << i;} // Driver codeint main(){    int arr[] = { 1, 2, 3, 4, 5, 0 };    int n = sizeof(arr) / sizeof(arr[0]);    findMaxNum(arr, n);    return 0;} // This code is contributed by Sania Kumari Gupta
// C program to generate largest possible number with// given digits#include <stdio.h> // Function to generate largest possible number with given// digitsvoid findMaxNum(int arr[], int n){    // Declare a hash array of size 10 and initialize all    // the elements to zero    int hash[10] = { 0 };     // store the number of occurrences of the digits in the    // given array into the hash table    for (int i = 0; i < n; i++)        hash[arr[i]]++;     // Traverse the hash in descending order to print the    // required number    for (int i = 9; i >= 0; i--)        // Print the number of times a digits occurs        for (int j = 0; j < hash[i]; j++)            printf("%d", i);} // Driver codeint main(){    int arr[] = { 1, 2, 3, 4, 5, 0 };    int n = sizeof(arr) / sizeof(arr[0]);    findMaxNum(arr, n);    return 0;} // This code is contributed by Sania Kumari Gupta
// Java program to generate  largest possible number with// given digitsclass GFG {    // Function to generate  largest possible number  with    // given digits    static void findMaxNum(int arr[], int n)    {        // Declare a hash array of  size 10 and initialize        // all the elements to zero        int[] hash = new int[10];        // store the number of occurrences  of the digits in        // the given array into the hash table        for (int i = 0; i < n; i++)            hash[arr[i]]++;         // Traverse the hash in descending order to print        // the required number        for (int i = 9; i >= 0; i--)            // Print the number of times a digits occurs            for (int j = 0; j < hash[i]; j++)                System.out.print(i);    }     // Driver code    public static void main(String[] args)    {        int arr[] = { 1, 2, 3, 4, 5, 0 };        int n = arr.length;        findMaxNum(arr, n);    }} // This code is contributed by Sania Kumari Gupta
# Python 3 program to generate# largest possible number# with given digits # Function to generate# largest possible number# with given digitsdef findMaxNum(arr, n):         # Declare a hash array of    # size 10 and initialize    # all the elements to zero    hash = [0] * 10         # store the number of occurrences    # of the digits in the given array    # into the hash table    for i in range(n):        hash[arr[i]] += 1         # Traverse the hash in    # descending order to    # print the required number    for i in range(9, -1, -1):                 # Print the number of        # times a digits occurs        for j in range(hash[i]):            print(i, end = "") # Driver codeif __name__ == "__main__":            arr = [1, 2, 3, 4, 5, 0]    n =len(arr)    findMaxNum(arr,n) # This code is contributed# by ChitraNayal
// C# program to generate// largest possible number// with given digitsusing System; class GFG{ // Function to generate// largest possible number// with given digitsstatic void findMaxNum(int[] arr,                       int n){// Declare a hash array of// size 10 and initialize// all the elements to zeroint[] hash = new int[10]; // store the number of// occurrences of the// digits in the given// array into the hash tablefor(int i = 0; i < n; i++){    hash[arr[i]]++;} // Traverse the hash in// descending order to// print the required numberfor(int i = 9; i >= 0; i--){    // Print the number of    // times a digits occurs    for(int j = 0; j < hash[i]; j++)        Console.Write(i);}} // Driver codepublic static void Main(){    int[] arr = {1, 2, 3, 4, 5, 0};         int n = arr.Length;         findMaxNum(arr,n);}} // This code is contributed// by ChitraNayal
<?php// PHP program to generate// largest possible number// with given digits // Function to generate// largest possible number// with given digitsfunction findMaxNum($arr, $n){    // Declare a hash array of    // size 10 and initialize    // all the elements to zero    $hash = array_fill(0, 10, 0);         // store the number of occurrences    // of the digits in the given array    // into the hash table    for($i = 0; $i < $n; $i++)        $hash[$arr[$i]] += 1;         // Traverse the hash in    // descending order to    // print the required number    for($i = 9; $i >= 0; $i--)             // Print the number of        // times a digits occurs        for($j = 0; $j < $hash[$i]; $j++)            echo $i;} // Driver code$arr = array(1, 2, 3, 4, 5, 0);$n = sizeof($arr);findMaxNum($arr,$n); // This code is contributed// by mits?>
<script> // Javascript program to generate largest possible// number with given digits // Function to generate largest possible// number with given digitsfunction findMaxNum( arr, n){    // Declare a hash array of size 10    // and initialize all the elements to zero    var hash = Array(10).fill(0);         // store the number of occurrences of the digits    // in the given array into the hash table    for(var i=0; i<n; i++)    {        hash[arr[i]]++;    }         // Traverse the hash in descending order    // to print the required number    for(var i=9; i>=0; i--)    {        // Print the number of times a digits occurs        for(var j=0; j<hash[i]; j++)            document.write(i);    }} // Driver codevar arr = [1, 2, 3, 4, 5, 0]; var n = arr.length; findMaxNum(arr,n); </script>
543210
 
Time Complexity: O(N), where N is the number of digits. Auxiliary Space: O(1), size of hash is only 10 which is a constant. 
ankthon
ukasp
Mithun Kumar
Sach_Code
rrrtnx
krisania804
Arrays
C-String-Question
Hash
Sorting Quiz
Arrays
Sorting
Arrays
Hash
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Introduction to Arrays
Python | Using 2D arrays/lists the right way
Linked List vs Array
Queue | Set 1 (Introduction and Array Implementation)
Find the Missing Number