Given an array arr[] of N elements and an integer K where K < N. The task is to insert K integer elements to the same array such that the median of the resultant array is maximized. Print the maximized median.
Examples:
Input: arr[] = {3, 2, 3, 4, 2}, k = 2
Output: 3
{2, 2, 3, 3, 4, 5, 5} can be once such resultant array with 3 as the median.
Input: arr[] = {3, 2, 3, 4, 2}, k = 3
Output: 3.5
Approach: In order to maximize the median of the resultant array, all the elements that need to be inserted must be greater than the maximum element from the array. After inserting these elements, the new size of the array will be size = N + K. Sort the array and the median of the array will be arr[size / 2] if the size is odd else (arr[(size / 2) – 1] + arr[size / 2]) / 2.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
float getMaxMedian( int arr[], int n, int k)
{
int size = n + k;
sort(arr, arr + n);
if (size % 2 == 0) {
float median = ( float )(arr[(size / 2) - 1]
+ arr[size / 2])
/ 2;
return median;
}
float median = arr[size / 2];
return median;
}
int main()
{
int arr[] = { 3, 2, 3, 4, 2 };
int n = sizeof (arr) / sizeof (arr[0]);
int k = 2;
cout << getMaxMedian(arr, n, k);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static double getMaxMedian( int [] arr, int n, int k)
{
int size = n + k;
Arrays.sort(arr);
if (size % 2 == 0 )
{
double median = ( double ) (arr[(size / 2 ) - 1 ]
+ arr[size / 2 ])
/ 2 ;
return median;
}
double median1 = arr[size / 2 ];
return median1;
}
public static void main(String[] args)
{
int [] arr = { 3 , 2 , 3 , 4 , 2 };
int n = arr.length;
int k = 2 ;
System.out.print(( int )getMaxMedian(arr, n, k));
}
}
|
Python3
def getMaxMedian(arr, n, k):
size = n + k
arr.sort(reverse = False )
if (size % 2 = = 0 ):
median = (arr[ int (size / 2 ) - 1 ] +
arr[ int (size / 2 )]) / 2
return median
median = arr[ int (size / 2 )]
return median
if __name__ = = '__main__' :
arr = [ 3 , 2 , 3 , 4 , 2 ]
n = len (arr)
k = 2
print (getMaxMedian(arr, n, k))
|
C#
using System;
using System.Linq;
class GFG
{
static double getMaxMedian( int []arr, int n, int k)
{
int size = n + k;
Array.Sort(arr);
if (size % 2 == 0)
{
double median = ( double )(arr[(size / 2) - 1]
+ arr[size / 2])
/ 2;
return median;
}
double median1 = arr[size / 2];
return median1;
}
static void Main()
{
int []arr = { 3, 2, 3, 4, 2 };
int n = arr.Length;
int k = 2;
Console.WriteLine(getMaxMedian(arr, n, k));
}
}
|
PHP
<?php
function getMaxMedian( $arr , $n , $k )
{
$size = $n + $k ;
sort( $arr , $n );
if ( $size % 2 == 0)
{
$median = (float)( $arr [( $size / 2) - 1] +
$arr [ $size / 2]) / 2;
return $median ;
}
$median = $arr [ $size / 2];
return $median ;
}
$arr = array ( 3, 2, 3, 4, 2 );
$n = sizeof( $arr );
$k = 2;
echo (getMaxMedian( $arr , $n , $k ));
|
Javascript
<script>
function getMaxMedian(arr, n, k) {
let size = n + k;
arr.sort((a, b) => a - b);
if (size % 2 == 0) {
let median = (arr[(Math.floor(size / 2) - 1)] +
arr[(Math.floor(size / 2))]) / 2;
return median;
}
let median = arr[(Math.floor(size / 2))];
return median;
}
let arr = [3, 2, 3, 4, 2];
let n = arr.length;
let k = 2;
document.write(getMaxMedian(arr, n, k));
</script>
|
Time Complexity: O(N * logN)
Auxiliary Space: O(1)
Please Login to comment...