Given an array of integers arr[] represents 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 between 0 and 9. That is, 0 < arr[i] < 9.
Examples:
Input: arr[] = {4, 7, 9, 2, 3}
Output: Largest number: 97432Input: 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 the array keeping the order of digits in the number the same as that of the sorted array.
Time Complexity: O(N logN), where N is the number of digits.
Below is the implementation of the above idea:
// 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;
} |
// Java program to generate largest // possible number with given digits import java.util.*;
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[n - 1 ];
// generate the number
for ( int i = n - 2 ; 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 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# 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.. |
<?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 ?> |
<script> // Javascript 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
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 code var arr = [1, 2, 3, 4, 5, 0];
var n = arr.length;
document.write(findMaxNum(arr,n)); </script> |
543210
Time complexity: O(nlogn)
Auxiliary space: O(1)
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 the above approach:
// 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;
} // 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 // 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++)
printf ( "%d" , 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;
} // This code is contributed by Sania Kumari Gupta |
// 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 Sania Kumari Gupta |
# 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# 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 |
<?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 ?> |
<script> // Javascript 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
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 code var arr = [1, 2, 3, 4, 5, 0];
var n = arr.length;
findMaxNum(arr,n); </script> |
543210
Complexity Analysis:
- 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.