Partition the array into two odd length groups with minimized absolute difference between their median

Given an array arr[] of positive integers of even length, the task is to partition these elements of arr[] into two groups each of odd length such that the absolute difference between the median of the two groups is minimized.
Examples:
Input: arr[] = { 1, 2, 3, 4, 5, 6 }
Output: 1
Explanation:
Group 1 can be [2, 4, 6] with median 4
Group 2 can be [1, 3, 5] with median 3.
The absolute difference between the two medians is 4 – 3 = 1, which can’t be minimized further with any kind of groupings formed.
Input: arr[] = { 15, 25, 35, 50 }
Output: 10
Explanation:
Group 1 can be [15, 25, 50] with median 25
Group 2 can be [35] with median 35.
The absolute difference between the two medians is 35 – 25 = 10, which can’t be minimized further with any kind of groupings formed.
Approach:
- If the given array arr[] is sorted, the middle elements of arr[] will give the minimum difference.
- So divide the arr[] in such a way that these two elements will be the median of two new arrays of odd length.
- Therefore, put the n/2th element of the arr[] in the first group and the (n/2 – 1)th element of the arr[] in the second group as a median respectively.
- Then abs(arr[n/2] – arr[(n/2)-1]) is the minimum difference between the two new arrays.
Below is the implementation of the above approach:
C++
// C++ program to minimize the// median between partition array#include "bits/stdc++.h"using namespace std;// Function to find minimize the// median between partition arrayint minimizeMedian(int arr[], int n){ // Sort the given array arr[] sort(arr, arr + n); // Return the difference of two // middle element of the arr[] return abs(arr[n / 2] - arr[(n / 2) - 1]);}// Driver Codeint main(){ int arr[] = { 15, 25, 35, 50 }; // Size of arr[] int n = sizeof(arr) / sizeof(arr[0]); // Function that returns the minimum // the absolute difference between // median of partition array cout << minimizeMedian(arr, n); return 0;} |
Java
// Java program to minimise the // median between partition arrayimport java.util.*;class GFG { // Function to find minimise the // median between partition array static int minimiseMedian(int arr[], int n) { // Sort the given array arr[] Arrays.sort(arr); // Return the difference of two // middle element of the arr[] return Math.abs(arr[n / 2] - arr[(n / 2) - 1]); } // Driver Code public static void main (String[] args) { int arr[] = { 15, 25, 35, 50 }; // Size of arr[] int n = arr.length; // Function that returns the minimum // the absolute difference between // median of partition array System.out.println(minimiseMedian(arr, n)); } }// This code is contributed by AnkitRai01 |
Python3
# Python3 program to minimise the # median between partition array # Function to find minimise the # median between partition array def minimiseMedian(arr, n) : # Sort the given array arr[] arr.sort(); # Return the difference of two # middle element of the arr[] ans = abs(arr[n // 2] - arr[(n // 2) - 1]); return ans; # Driver Code if __name__ == "__main__" : arr = [ 15, 25, 35, 50 ]; # Size of arr[] n = len(arr); # Function that returns the minimum # the absolute difference between # median of partition array print(minimiseMedian(arr, n)); # This code is contributed by AnkitRai01 |
C#
// C# program to minimise the // median between partition arrayusing System;class GFG { // Function to find minimise the // median between partition array static int minimiseMedian(int []arr, int n) { // Sort the given array []arr Array.Sort(arr); // Return the difference of two // middle element of the []arr return Math.Abs(arr[n / 2] - arr[(n / 2) - 1]); } // Driver Code public static void Main(String[] args) { int []arr = { 15, 25, 35, 50 }; // Size of []arr int n = arr.Length; // Function that returns the minimum // the absolute difference between // median of partition array Console.WriteLine(minimiseMedian(arr, n)); } }// This code is contributed by 29AjayKumar |
Javascript
<script>// JavaScript program to minimise the// median between partition array// Function to find minimise the// median between partition arrayfunction minimiseMedian(arr, n) { // Sort the given array arr[] arr.sort((a, b) => a - b); // Return the difference of two // middle element of the arr[] return Math.abs(arr[n / 2] - arr[(n / 2) - 1]);}// Driver Codelet arr = [15, 25, 35, 50];// Size of arr[]let n = arr.length;// Function that returns the minimum// the absolute difference between// median of partition arraydocument.write(minimiseMedian(arr, n));// This code is contributed by gfgking</script> |
10
Time Complexity: O(N*log N)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



