Greatest number that can be formed from a pair in a given Array
Given an array arr[], the task is to find the largest number that can be formed from a pair in the given array.
Examples:
Input: arr[] = { 3, 1, 9, 2 }
Output: 93
The pair (3, 9) leads to forming of maximum number 93
Input: arr[] = { 23, 14, 16, 25, 3, 9 }
Output: 2523
The pair (23, 25) leads to forming of maximum number 2523
Approach: The idea is to form every possible pairs of the array. Then for each pair X and Y, join them as XY and YX and take the maximum out of all such pairs.
for every possible in array (X, Y)
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
string getNumber( int a, int b)
{
string X = to_string(a);
string Y = to_string(b);
string XY = X + Y;
string YX = Y + X;
return XY > YX ? XY : YX;
}
void printMaxPair( int arr[], int n)
{
int largest = INT_MIN;
for ( int i = 0; i < n; i++)
for ( int j = i + 1; j < n; j++) {
int number = stoi(
getNumber(arr[i], arr[j]));
largest = max(largest, number);
}
cout << largest;
}
int main()
{
int a[] = { 23, 14, 16, 25, 3, 9 };
int n = sizeof (a) / sizeof (a[0]);
printMaxPair(a, n);
return 0;
}
|
Java
import java.util.*;
class GFG{
static String getNumber( int a, int b)
{
String X = Integer.toString(a);
String Y = Integer.toString(b);
String XY = X + Y;
String YX = Y + X;
return XY.compareTo(YX) > 0 ? XY : YX;
}
static void printMaxPair( int arr[], int n)
{
int largest = Integer.MIN_VALUE;
for ( int i = 0 ; i < n; i++)
for ( int j = i + 1 ; j < n; j++)
{
int number = Integer.parseInt(getNumber(arr[i],
arr[j]));
largest = Math.max(largest, number);
}
System.out.println(largest);
}
public static void main(String[] args)
{
int a[] = { 23 , 14 , 16 , 25 , 3 , 9 };
int n = a.length;
printMaxPair(a, n);
}
}
|
Python3
import sys;
def getNumber(a, b):
X = str (a);
Y = str (b);
XY = X + Y;
YX = Y + X;
if (XY > YX):
return XY;
else :
return YX;
def printMaxPair(arr, n):
largest = - sys.maxsize - 1 ;
for i in range ( 0 , n):
for j in range (i + 1 , n):
number = int (getNumber(arr[i],
arr[j]));
largest = max (largest, number);
print (largest);
a = [ 23 , 14 , 16 , 25 , 3 , 9 ];
n = len (a);
printMaxPair(a, n);
|
C#
using System;
class GFG{
static String getNumber( int a, int b)
{
String X = a.ToString();
String Y = b.ToString();
String XY = X + Y;
String YX = Y + X;
return XY.CompareTo(YX) > 0 ? XY : YX;
}
static void printMaxPair( int []arr, int n)
{
int largest = int .MinValue;
for ( int i = 0; i < n; i++)
for ( int j = i + 1; j < n; j++)
{
int number = Int32.Parse(getNumber(arr[i],
arr[j]));
largest = Math.Max(largest, number);
}
Console.WriteLine(largest);
}
public static void Main(String[] args)
{
int []a = { 23, 14, 16, 25, 3, 9 };
int n = a.Length;
printMaxPair(a, n);
}
}
|
Javascript
<script>
function getNumber(a, b)
{
var X = a.toString();
var Y = b.toString();
var XY = X + Y;
var YX = Y + X;
return XY > YX ? XY : YX;
}
function printMaxPair(arr, n)
{
var largest = -100000000;
for ( var i = 0; i < n; i++)
for ( var j = i + 1; j < n; j++) {
var number = parseInt(
getNumber(arr[i], arr[j]));
largest = Math.max(largest, number);
}
document.write( largest);
}
var a = [ 23, 14, 16, 25, 3, 9];
var n = a.length;
printMaxPair(a, n);
</script>
|
Time Complexity: O(n2)
Auxiliary Space: O(1)
Approach:
- Sort the given array arr[] in descending order.
- Form a pair using the first two elements of the sorted array.
- Concatenate the first and second element of the pair to form a number.
- Continue the process of forming pairs using the remaining elements of the array until all the pairs are formed.
- Among all the numbers formed in step 3, find the maximum number and return it.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void printMaxPair( int arr[], int n)
{
sort(arr, arr + n, greater< int >());
int max_num = 0;
for ( int i = 0; i < n - 1; i++) {
int num = stoi(to_string(arr[i])
+ to_string(arr[i + 1]));
max_num = max(max_num, num);
}
cout << max_num << endl;
}
int main()
{
int a[] = { 23, 14, 16, 25, 3, 9 };
int n = sizeof (a) / sizeof (a[0]);
printMaxPair(a, n);
return 0;
}
|
Java
import java.util.*;
public class GFG {
static void printMaxPair( int [] arr, int n)
{
Arrays.sort(arr);
for ( int i = 0 ; i < n / 2 ; i++) {
int temp = arr[i];
arr[i] = arr[n - i - 1 ];
arr[n - i - 1 ] = temp;
}
int max_num = 0 ;
for ( int i = 0 ; i < n - 1 ; i++) {
int num = Integer.parseInt(
Integer.toString(arr[i])
+ Integer.toString(arr[i + 1 ]));
max_num = Math.max(max_num, num);
}
System.out.println(max_num);
}
public static void main(String[] args)
{
int [] a = { 23 , 14 , 16 , 25 , 3 , 9 };
int n = a.length;
printMaxPair(a, n);
}
}
|
Python3
def printMaxPair(arr, n):
arr.sort(reverse = True )
max_num = 0
for i in range (n - 1 ):
num = int ( str (arr[i]) + str (arr[i + 1 ]))
max_num = max (max_num, num)
print (max_num)
a = [ 23 , 14 , 16 , 25 , 3 , 9 ]
n = len (a)
printMaxPair(a, n)
|
C#
using System;
class Program
{
static void PrintMaxPair( int [] arr, int n)
{
Array.Sort(arr, (a, b) => b.CompareTo(a));
int max_num = 0;
for ( int i = 0; i < n - 1; i++)
{
int num = Convert.ToInt32(arr[i].ToString() + arr[i + 1].ToString());
max_num = Math.Max(max_num, num);
}
Console.WriteLine(max_num);
}
static void Main( string [] args)
{
int [] a = { 23, 14, 16, 25, 3, 9 };
int n = a.Length;
PrintMaxPair(a, n);
}
}
|
Javascript
function printMaxPair(arr) {
arr.sort((a, b) => b - a);
let maxNum = 0;
for (let i = 0; i < arr.length - 1; i++) {
const num = parseInt(arr[i].toString() + arr[i + 1].toString());
maxNum = Math.max(maxNum, num);
}
console.log(maxNum);
}
const a = [23, 14, 16, 25, 3, 9];
printMaxPair(a);
|
Time Complexity: O(n log n)
Auxiliary Space: O(1)
Last Updated :
20 Sep, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...