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> |
Output
-5
Time complexity: O(n)
Auxiliary Space: O(1)
Recommended Articles