Minimize the difference between minimum and maximum elements
Last Updated :
23 Feb, 2023
Given an array of integers and an integer . It is allowed to modify an element either by increasing or decreasing them by k (only once).
The task is to minimize and print the maximum difference between the shortest and longest towers.
Examples:
Input: arr[] = {1, 10, 8, 5}, k = 2
Output : Max height difference = 5
Explanation:
modified arr[]={3, 8, 6, 7}
max difference: 5
Input: arr[] = {3, 16, 12, 9, 20}, k = 3
Output : Max height difference: 11
Approach:
- Find the max and min elements present in the array.
- Check whether the difference between the max and min element is less than or equal to k or not:
- If yes, then return the difference between the max and min element.
- otherwise, go to step 3.
- Calculate the average of the max and min elements of the array.
- Traverse the array and do the following operations:
- If the array element is greater than the average then decrease it by k.
- If the array element is smaller than the average then increase it by k.
- Return the difference between the max and min elements of the modified array.
Below is the implementation of above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int minimizeDiff( int * arr, int n, int k)
{
int max = *(max_element(arr, arr + n));
int min = *(min_element(arr, arr + n));
if ((max - min) <= k) {
return (max - min);
}
int avg = (max + min) / 2;
for ( int i = 0; i < n; i++) {
if (arr[i] > avg)
arr[i] -= k;
else
arr[i] += k;
}
max = *(max_element(arr, arr + n));
min = *(min_element(arr, arr + n));
return (max - min);
}
int main()
{
int arr[] = { 3, 16, 12, 9, 20 };
int n = 5;
int k = 3;
cout << "Max height difference = "
<< minimizeDiff(arr, n, k) << endl;
return 0;
}
|
Java
import java.util.*;
class GFG
{
static int minimizeDiff( int [] arr, int n, int k)
{
int max = Arrays.stream(arr).max().getAsInt();
int min = Arrays.stream(arr).min().getAsInt();
if ((max - min) <= k)
{
return (max - min);
}
int avg = (max + min) / 2 ;
for ( int i = 0 ; i < n; i++)
{
if (arr[i] > avg)
{
arr[i] -= k;
}
else
{
arr[i] += k;
}
}
max = Arrays.stream(arr).max().getAsInt();
min = Arrays.stream(arr).min().getAsInt();
return (max - min);
}
public static void main(String[] args)
{
int arr[] = { 3 , 16 , 12 , 9 , 20 };
int n = 5 ;
int k = 3 ;
System.out.println( "Max height difference = "
+ minimizeDiff(arr, n, k));
}
}
|
Python3
def minimizeDiff(arr, n, k) :
max_element = max (arr)
min_element = min (arr)
if ((max_element - min_element) < = k) :
return (max_element - min_element)
avg = (max_element + min_element) / / 2
for i in range (n):
if (arr[i] > avg) :
arr[i] - = k
else :
arr[i] + = k
max_element = max (arr)
min_element = min (arr)
return (max_element - min_element);
if __name__ = = "__main__" :
arr = [ 3 , 16 , 12 , 9 , 20 ]
n = 5
k = 3
print ( "Max height difference =" ,
minimizeDiff(arr, n, k))
|
C#
using System;
using System.Linq;
class GFG
{
static int minimizeDiff( int [] arr, int n, int k)
{
int max = arr.Max();
int min = arr.Min();
if ((max - min) <= k)
{
return (max - min);
}
int avg = (max + min) / 2;
for ( int i = 0; i < n; i++)
{
if (arr[i] > avg)
{
arr[i] -= k;
}
else
{
arr[i] += k;
}
}
max = arr.Max();
min = arr.Min();
return (max - min);
}
public static void Main()
{
int []arr = {3, 16, 12, 9, 20};
int n = 5;
int k = 3;
Console.WriteLine( "Max height difference = "
+ minimizeDiff(arr, n, k));
}
}
|
PHP
<?php
function minimizeDiff(& $arr , $n , $k )
{
$max = max( $arr );
$min = min( $arr );
if (( $max - $min ) <= $k )
{
return ( $max - $min );
}
$avg = ( $max + $min ) / 2;
for ( $i = 0; $i < $n ; $i ++)
{
if ( $arr [ $i ] > $avg )
$arr [ $i ] -= $k ;
else
$arr [ $i ] += $k ;
}
$max = max( $arr );
$min = min( $arr );
return ( $max - $min );
}
$arr = array ( 3, 16, 12, 9, 20 );
$n = 5;
$k = 3;
echo "Max height difference = " .
minimizeDiff( $arr , $n , $k ). "\n" ;
?>
|
Javascript
<script>
function minimizeDiff(arr,n,k)
{
let max = Math.max(...arr);
let min = Math.min(...arr);
if ((max - min) <= k)
{
return (max - min);
}
let avg = Math.floor((max + min) / 2);
for (let i = 0; i < n; i++)
{
if (arr[i] > avg)
{
arr[i] -= k;
}
else
{
arr[i] += k;
}
}
max = Math.max(...arr);
min = Math.min(...arr);
return (max - min);
}
let arr=[3, 16, 12, 9, 20];
let n = 5;
let k = 3;
document.write( "Max height difference = "
+ minimizeDiff(arr, n, k));
</script>
|
OutputMax height difference = 11
Time Complexity: O( N )
Space Complexity: O( 1 )
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...