Minimize the difference between minimum and maximum elements - GeeksforGeeks

13 May, 2021
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.
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.
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.
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++
Java
Python3
C#
PHP
Javascript
// 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 elementsint 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 codeint 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 program to minimize the difference between// minimum and maximum elementsimport 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
# Python 3 program to minimize the# difference between minimum and# maximum elements # Function to minimize the difference# between minimum and maximum elementsdef 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 codeif __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# program to minimize the difference between// minimum and maximum elementsusing 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 program to minimize the difference// between minimum and maximum elements // Function to minimize the difference// between minimum and maximum elementsfunction 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?>
<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>
Max height difference = 11
 
Time Complexity: O( N ) 
ankthon
ukasp
29AjayKumar
princiraj1992
avanitrachhadiya2155
Technical Scripter 2018
Arrays
Greedy
Technical Scripter
Arrays
Greedy
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Stack Data Structure (Introduction and Program)
Introduction to Arrays
Multidimensional Arrays in Java
Dijkstra's shortest path algorithm | Greedy Algo-7
Kruskal’s Minimum Spanning Tree Algorithm | Greedy Algo-2
Prim’s Minimum Spanning Tree (MST) | Greedy Algo-5
Write a program to print all permutations of a given string
Huffman Coding | Greedy Algo-3