Maximize the median of the given array after adding K elements to the same array in C++

C++Server Side ProgrammingProgramming

Problem statement

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

If input array is {1, 3, 2, 5} and k = 3 then −

  • Sorted array becomes {1, 2, 3, 5}
  • Insert 3 elements that are greater than 5. After this operation array becomes {1, 2, 3, 5, 6, 6, 6}
  • Median of the new array is 5

Algorithm

1. 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
2. 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

Example

 Live Demo

#include <bits/stdc++.h>
using namespace std;
double getMaxMedian(int *arr, int n, int k){
   int newSize = n + k;
   double median;
   sort(arr, arr + n);
   if (newSize % 2 == 0) {
      median = (arr[(newSize / 2) - 1] + arr[newSize / 2]) / 2;
      return median;
   }
   median = arr[newSize / 2];
   return median;
}
int main(){
   int arr[] = {1, 3, 2, 5};
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 3;
   cout << "Max median = " << getMaxMedian(arr, n, k) << endl;
   return 0;
}

Output

When you compile and execute the above program. It generates following output:

Max median = 5
raja
Published on 24-Dec-2019 11:36:35
Advertisements