Skip to content
Related Articles

Related Articles

Improve Article

Minimize the difference between minimum and maximum elements

  • Difficulty Level : Medium
  • Last Updated : 13 May, 2021

Given an array of N   integers and an integer k   . 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: 
 

  1. Find the max and min elements present in the array.
  2. 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.
  3. Calculate the average of the max and min elements of the array.
  4. 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.
  5. Return the difference between the max and min elements of the modified array.

Below is the implementation of above approach: 
 

C++




// C++ program to minimize the difference between
// minimum and maximum elements
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to minimize the difference between
// minimum and maximum elements
int minimizeDiff(int* arr, int n, int k)
{
    // Find max and min elements of the array
    int max = *(max_element(arr, arr + n));
    int min = *(min_element(arr, arr + n));
 
    // Check whether the difference between
    // the max and min element is less than
    // or equal to k or not
    if ((max - min) <= k) {
        return (max - min);
    }
 
    // Calculate average of max and min
    int avg = (max + min) / 2;
 
    for (int i = 0; i < n; i++) {
        // If the array element is greater than the
        // average then decrease it by k
        if (arr[i] > avg)
            arr[i] -= k;
        // If the array element is smaller than the
        // average then increase it by k
        else
            arr[i] += k;
    }
 
    // Find max and min of the modified array
    max = *(max_element(arr, arr + n));
    min = *(min_element(arr, arr + n));
 
    // return the new difference
    return (max - min);
}
 
// Driver code
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




// Java program to minimize the difference between
// minimum and maximum elements
import java.util.*;
 
class GFG
{
 
    // Function to minimize the difference between
    // minimum and maximum elements
    static int minimizeDiff(int[] arr, int n, int k)
    {
        // Find max and min elements of the array
        int max = Arrays.stream(arr).max().getAsInt();
        int min = Arrays.stream(arr).min().getAsInt();
 
        // Check whether the difference between
        // the max and min element is less than
        // or equal to k or not
        if ((max - min) <= k)
        {
            return (max - min);
        }
 
        // Calculate average of max and min
        int avg = (max + min) / 2;
 
        for (int i = 0; i < n; i++)
        {
            // If the array element is greater than the
            // average then decrease it by k
            if (arr[i] > avg)
            {
                arr[i] -= k;
            }
             
            // If the array element is smaller than the
            // average then increase it by k
            else
            {
                arr[i] += k;
            }
        }
 
        // Find max and min of the modified array
        max = Arrays.stream(arr).max().getAsInt();
        min = Arrays.stream(arr).min().getAsInt();
 
        // return the new difference
        return (max - min);
    }
 
    // Driver code
    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));
    }
}
 
// This code has been contributed by 29AjayKumar

Python3




# Python 3 program to minimize the
# difference between minimum and
# maximum elements
 
# Function to minimize the difference
# between minimum and maximum elements
def minimizeDiff(arr, n, k) :
 
    # Find max and min elements
    # of the array
    max_element = max(arr)
    min_element = min(arr)
 
    # Check whether the difference between
    # the max and min element is less than
    # or equal to k or not
    if ((max_element - min_element) <= k) :
        return (max_element - min_element)
     
    # Calculate average of max and min
    avg = (max_element + min_element) // 2
 
    for i in range(n):
         
        # If the array element is greater than
        # the average then decrease it by k
        if (arr[i] > avg) :
            arr[i] -= k
             
        # If the array element is smaller than 
        # the average then increase it by k
        else :
            arr[i] += k
 
    # Find max and min of the
    # modified array
    max_element = max(arr)
    min_element = min(arr)
 
    # return the new difference
    return (max_element - min_element);
 
# Driver code
if __name__ == "__main__" :
     
    arr = [ 3, 16, 12, 9, 20 ]
    n = 5
    k = 3
     
    print("Max height difference =",
            minimizeDiff(arr, n, k))
 
# This code is contributed by Ryuga

C#




// C# program to minimize the difference between
// minimum and maximum elements
using System;
using System.Linq;
 
class GFG
{
 
    // Function to minimize the difference between
    // minimum and maximum elements
    static int minimizeDiff(int[] arr, int n, int k)
    {
        // Find max and min elements of the array
        int max = arr.Max();
        int min = arr.Min();
 
        // Check whether the difference between
        // the max and min element is less than
        // or equal to k or not
        if ((max - min) <= k)
        {
            return (max - min);
        }
 
        // Calculate average of max and min
        int avg = (max + min) / 2;
 
        for (int i = 0; i < n; i++)
        {
            // If the array element is greater than the
            // average then decrease it by k
            if (arr[i] > avg)
            {
                arr[i] -= k;
            }
             
            // If the array element is smaller than the
            // average then increase it by k
            else
            {
                arr[i] += k;
            }
        }
 
        // Find max and min of the modified array
        max = arr.Max();
        min = arr.Min();
 
        // return the new difference
        return (max - min);
    }
 
    // Driver code
    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));
    }
}
 
/* This code contributed by PrinciRaj1992 */

PHP




<?php
// PHP program to minimize the difference
// between minimum and maximum elements
 
// Function to minimize the difference
// between minimum and maximum elements
function minimizeDiff(&$arr, $n, $k)
{
    // Find max and min elements
    // of the array
    $max = max($arr);
    $min = min($arr);
 
    // Check whether the difference between
    // the max and min element is less than
    // or equal to k or not
    if (($max - $min) <= $k)
    {
        return ($max - $min);
    }
 
    // Calculate average of max and min
    $avg = ($max + $min) / 2;
 
    for ($i = 0; $i < $n; $i++)
    {
        // If the array element is greater than
        // the average then decrease it by k
        if ($arr[$i] > $avg)
            $arr[$i] -= $k;
             
        // If the array element is smaller than
        // the average then increase it by k
        else
            $arr[$i] += $k;
    }
 
    // Find max and min of the
    // modified array
    $max = max($arr);
    $min = min($arr);
 
    // return the new difference
    return ($max - $min);
}
 
// Driver code
$arr = array( 3, 16, 12, 9, 20 );
$n = 5;
$k = 3;
 
echo "Max height difference = " .
      minimizeDiff($arr, $n, $k). "\n";
 
// This code is contributed by ita_c
?>

Javascript




<script>
 
// Javascript program to minimize
// the difference between
// minimum and maximum elements
     
    // Function to minimize the difference between
    // minimum and maximum elements
    function minimizeDiff(arr,n,k)
    {
        // Find max and min elements of the array
        let max = Math.max(...arr);
        let min = Math.min(...arr);
   
        // Check whether the difference between
        // the max and min element is less than
        // or equal to k or not
        if ((max - min) <= k)
        {
            return (max - min);
        }
   
        // Calculate average of max and min
           let avg = Math.floor((max + min) / 2);
   
        for (let i = 0; i < n; i++)
        {
            // If the array element is greater than the
            // average then decrease it by k
            if (arr[i] > avg)
            {
                arr[i] -= k;
            }
               
            // If the array element is smaller than the
            // average then increase it by k
            else
            {
                arr[i] += k;
            }
        }
   
        // Find max and min of the modified array
       max = Math.max(...arr);
        min = Math.min(...arr);
   
        // return the new difference
        return (max - min);
    }
     
    // Driver code
    let arr=[3, 16, 12, 9, 20];
    let n = 5;
    let k = 3;
    document.write("Max height difference = "
                + minimizeDiff(arr, n, k));
     
     
     
// This code is contributed by avanitrachhadiya2155
 
</script>
Output: 



Max height difference = 11

 

Time Complexity: O( N )
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :