# Find the largest number that can be formed with the given digits

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
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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++

 `// C++ program to generate largest possible ` `// number with given digits ` `#include ` ` `  `using` `namespace` `std; ` ` `  `// Function to generate largest possible ` `// number with given digits ` `int` `findMaxNum(``int` `arr[], ``int` `n) ` `{    ` `    ``// sort the given array in ` `    ``// descending order ` `    ``sort(arr, arr+n, greater<``int``>()); ` `     `  `    ``int` `num = arr; ` `     `  `    ``// generate the number ` `    ``for``(``int` `i=1; i

## Java

 `// Java program to generate largest ` `// possible number with given digits ` `import` `java.*; ` `import` `java.util.Arrays; ` ` `  `class` `GFG ` `{ ` `// Function to generate largest  ` `// possible number with given digits ` `static` `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 code ` `public` `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

 `# Python3 program to generate largest possible ` `# number with given digits ` ` `  `# Function to generate largest possible ` `# number with given digits ` `def` `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 code ` `if` `__name__ ``=``=` `"__main__"` `: ` `     `  `    ``arr ``=` `[``1``,``2``,``3``,``4``,``5``,``0``] ` ` `  `    ``n ``=` `len``(arr) ` ` `  `    ``print``(findMaxNum(arr,n)) ` `    `

## C#

 `// C#  program to generate largest ` `// possible number with given digits ` `using` `System; ` ` `  `public` `class` `GFG{ ` `    ``// Function to generate largest  ` `// possible number with given digits ` `static` `int` `findMaxNum(``int` `[]arr, ``int` `n) ` `{  ` `    ``// sort the given array in ` `    ``// ascending order and then ` `    ``// traverse into descending ` `    ``Array.Sort(arr); ` `     `  `    ``int` `num = arr; ` `     `  `    ``// 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

 ` `

Output:

```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++ program to generate largest possible ` `// number with given digits ` `#include ` ` `  `using` `namespace` `std; ` ` `  `// Function to generate largest possible ` `// number with given digits ` `void` `findMaxNum(``int` `arr[], ``int` `n) ` `{    ` `    ``// Declare a hash array of size 10 ` `    ``// and initialize all the elements to zero ` `    ``int` `hash = {0}; ` `     `  `    ``// store the number of occurrences of the digits ` `    ``// in the given array into the hash table ` `    ``for``(``int` `i=0; i=0; i--) ` `    ``{ ` `        ``// Print the number of times a digits occurs ` `        ``for``(``int` `j=0; j

## Java

 `// Java program to generate  ` `// largest possible number ` `// with given digits ` `class` `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 ChitraNayal `

## Python 3

 `# Python 3 program to generate  ` `# largest possible number  ` `# with given digits ` ` `  `# Function to generate  ` `# largest possible number  ` `# with given digits ` `def` `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 code ` `if` `__name__ ``=``=` `"__main__"``:          ` `    ``arr ``=` `[``1``, ``2``, ``3``, ``4``, ``5``, ``0``] ` `    ``n ``=``len``(arr) ` `    ``findMaxNum(arr,n) ` ` `  `# This code is contributed ` `# by ChitraNayal `

## C#

 `// C# program to generate  ` `// largest possible number  ` `// with given digits ` `using` `System; ` ` `  `class` `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``; ` ` `  `// 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++) ` `        ``Console.Write(i); ` `} ` `} ` ` `  `// Driver code ` `public` `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

 `= 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 ` `?> `

Output:

```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.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

3

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.