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 

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 digits
int 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 code
int main() 
{
    int arr[] = {1, 2, 3, 4, 5, 0};
      
    int n = sizeof(arr)/sizeof(arr[0]);
      
    cout<<findMaxNum(arr,n);
      
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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))
     

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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[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..

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php 
// PHP program to generate 
// largest possible number
// with given digits
  
// Function to generate
// largest possible number
// with given digits
function 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
?>

chevron_right


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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 digits
void 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 code
int main() 
{
    int arr[] = {1, 2, 3, 4, 5, 0};
      
    int n = sizeof(arr)/sizeof(arr[0]);
      
    findMaxNum(arr,n);
      
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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[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++)
        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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to generate 
// largest possible number 
// with given digits
  
// Function to generate 
// largest possible number 
// with given digits
function 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
?>

chevron_right


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.



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.