Divide an array into k segments to maximize maximum of segment minimums
Last Updated :
18 Sep, 2023
Given an array of n integers, divide it into k segments and find the maximum of the minimums of k segments. Output the maximum integer that can be obtained among all ways to segment in k subarrays.
Examples:
Input : arr[] = {1, 2, 3, 6, 5}
k = 2
Output: 5
Explanation: There are many ways to create
two segments. The optimal segments are (1, 2, 3)
and (6, 5). Minimum of both segments are 1 and 5,
hence the maximum(1, 5) is 5.
Input: -4 -5 -3 -2 -1 k=1
Output: -5
Explanation: only one segment, so minimum is -5.
There will be 3 cases that need to be considered.
- k >= 3: When k is greater than 2, one segment will only compose of {max element}, so that max of minimum segments will always be the max.
- k = 2: For k = 2 the answer is the maximum of the first and last element.
- k = 1: Only possible partition is one segment equal to the whole array. So the answer is the minimum value on the whole array.
Below is the implementation of the above approach
C++
// CPP Program to find maximum value of
// maximum of minimums of k segments.
#include <bits/stdc++.h>
using namespace std;
// function to calculate the max of all the
// minimum segments
int maxOfSegmentMins(int a[], int n, int k)
{
// if we have to divide it into 1 segment
// then the min will be the answer
if (k == 1)
return *min_element(a, a+n);
if (k == 2)
return max(a[0], a[n-1]);
// If k >= 3, return maximum of all
// elements.
return *max_element(a, a+n);
}
// driver program to test the above function
int main()
{
int a[] = { -10, -9, -8, 2, 7, -6, -5 };
int n = sizeof(a) / sizeof(a[0]);
int k = 2;
cout << maxOfSegmentMins(a, n, k);
}
Java
// Java Program to find maximum
// value of maximum of minimums
// of k segments.
import java .io.*;
import java .util.*;
class GFG
{
// function to calculate
// the max of all the
// minimum segments
static int maxOfSegmentMins(int []a,
int n,
int k)
{
// if we have to divide
// it into 1 segment then
// the min will be the answer
if (k == 1)
{
Arrays.sort(a);
return a[0];
}
if (k == 2)
return Math.max(a[0],
a[n - 1]);
// If k >= 3, return
// maximum of all
// elements.
return a[n - 1];
}
// Driver Code
static public void main (String[] args)
{
int []a = {-10, -9, -8,
2, 7, -6, -5};
int n = a.length;
int k = 2;
System.out.println(
maxOfSegmentMins(a, n, k));
}
}
// This code is contributed
// by anuj_67.
Python3
# Python3 Program to find maximum value of
# maximum of minimums of k segments.
# function to calculate the max of all the
# minimum segments
def maxOfSegmentMins(a,n,k):
# if we have to divide it into 1 segment
# then the min will be the answer
if k ==1:
return min(a)
if k==2:
return max(a[0],a[n-1])
# If k >= 3, return maximum of all
# elements.
return max(a)
# Driver code
if __name__=='__main__':
a = [-10, -9, -8, 2, 7, -6, -5]
n = len(a)
k =2
print(maxOfSegmentMins(a,n,k))
# This code is contributed by
# Shrikant13
C#
// C# Program to find maximum value of
// maximum of minimums of k segments.
using System;
using System.Linq;
public class GFG {
// function to calculate the max
// of all the minimum segments
static int maxOfSegmentMins(int []a,
int n, int k)
{
// if we have to divide it into 1
// segment then the min will be
// the answer
if (k == 1)
return a.Min();
if (k == 2)
return Math.Max(a[0], a[n - 1]);
// If k >= 3, return maximum of
// all elements.
return a.Max();
}
// Driver function
static public void Main ()
{
int []a = { -10, -9, -8, 2, 7,
-6, -5 };
int n = a.Length;
int k = 2;
Console.WriteLine(
maxOfSegmentMins(a, n, k));
}
}
// This code is contributed by vt_m.
PHP
<?php
// PHP Program to find maximum
// value of maximum of minimums
// of k segments.
// function to calculate
// the max of all the
// minimum segments
function maxOfSegmentMins($a, $n, $k)
{
// if we have to divide
// it into 1 segment then
// the min will be the answer
if ($k == 1)
return min($a);
if ($k == 2)
return max($a[0],
$a[$n - 1]);
// If k >= 3, return
// maximum of all elements.
return max($a);
}
// Driver Code
$a = array(-10, -9, -8,
2, 7, -6, -5);
$n = count($a);
$k = 2;
echo maxOfSegmentMins($a, $n, $k);
// This code is contributed by vits.
?>
JavaScript
<script>
// javascript Program to find maximum
// value of maximum of minimums
// of k segments.
// function to calculate
// the max of all the
// minimum segments
function maxOfSegmentMins(a , n , k)
{
// if we have to divide
// it into 1 segment then
// the min will be the answer
if (k == 1) {
a.sort();
return a[0];
}
if (k == 2)
return Math.max(a[0], a[n - 1]);
// If k >= 3, return
// maximum of all
// elements.
return a[n - 1];
}
// Driver Code
var a = [ -10, -9, -8, 2, 7, -6, -5 ];
var n = a.length;
var k = 2;
document.write(maxOfSegmentMins(a, n, k));
// This code is contributed by Rajput-Ji
</script>
Time complexity: O(n)
Auxiliary Space: O(1)
Similar Reads
Split array into K subsets to maximize their sum of maximums and minimums Given an integer K and an array A[ ] whose length is multiple of K, the task is to split the elements of the given array into K subsets, each having an equal number of elements, such that the sum of the maximum and minimum elements of each subset is the maximum summation possible. Examples: Input: K
6 min read
Divide the array in K segments such that the sum of minimums is maximized Given an array a of size N and an integer K, the task is to divide the array into K segments such that sum of the minimum of K segments is maximized. Examples: Input: a[] = {5, 7, 4, 2, 8, 1, 6}, K = 3 Output: 7 Divide the array at indexes 0 and 1. Then the segments are {5}, {7}, {4, 2, 8, 1, 6}. Su
9 min read
Maximize the maximum among minimum of K consecutive sub-arrays Given an integer K and an array arr[], the task is to split the array arr[] into K consecutive subarrays to find the maximum possible value of the maximum among the minimum value of K consecutive sub-arrays. Examples: Input: arr[] = {1, 2, 3, 4, 5}, K = 2 Output: 5 Split the array as [1, 2, 3, 4] an
9 min read
Split array into K non-empty subsets such that sum of their maximums and minimums is maximized Given two arrays arr[] and S[] consisting of N and K integers, the task is to find the maximum sum of minimum and maximum of each subset after splitting the array into K subsets such that the size of each subset is equal to one of the elements in the array S[]. Examples: Input: arr[] = {1, 13, 7, 17
7 min read
Split given arrays into subarrays to maximize the sum of maximum and minimum in each subarrays Given an array arr[] consisting of N integers, the task is to maximize the sum of the difference of the maximum and minimum in each subarrays by splitting the given array into non-overlapping subarrays. Examples: Input: arr[] = {8, 1, 7, 9, 2}Output: 14Explanation:Split the given array arr[] as {8,
6 min read