# Minimize the difference between the maximum and minimum values of the modified array

• Difficulty Level : Easy
• Last Updated : 19 May, 2021

Given an array A of n integers and integer X. You may choose any integer between , and add k to A[i] for each . The task is to find the smallest possible difference between the maximum value of A and the minimum value of A after updating array A.
Examples:

Input: arr[] = {1, 3, 6}, x = 3
Output: 0
New array is [3, 3, 3] or [4, 4, 4].

Input: arr[] = {0, 10}, x = 2
Output: 6
New array is [2, 8] i.e add 2 to a[0] and subtract -2 from a[1].

Approach: Let A be the original array. Towards trying to minimize max(A) – min(A), let’s try to minimize max(A) and maximize min(A) separately.
The smallest possible value of max(A) is max(A) – K, as the value max(A) cannot go lower. Similarly, the largest possible value of min(A) is min(A) + K. So the quantity max(A) – min(A) is at least ans = (max(A) – K) – (min(A) + K).
We can attain this value, by the following modifications:

• If A[i] <= min(A) + K, then A[i] = min(A) + K
• Else, if A[i] >= max(A) – K, then A[i] = max(A) – K

If ans < 0, the best answer we could have is ans = 0, also using the same modification.

Below is the implementation of above approach.

## CPP

 // C++ program to find the minimum difference.#include using namespace std; // Function to return required minimum differenceint minDiff(int n, int x, int A[]){    int mn = A[0], mx = A[0];     // finding minimum and maximum values    for (int i = 0; i < n; ++i) {        mn = min(mn, A[i]);        mx = max(mx, A[i]);    }     // returning minimum possible difference    return max(0, mx - mn - 2 * x);} // Driver programint main(){     int n = 3, x = 3;    int A[] = { 1, 3, 6 };     // function to return the answer    cout << minDiff(n, x, A);     return 0;}

## Java

 // Java program to find the minimum difference. import java.util.*;class GFG{         // Function to return required minimum difference    static int minDiff(int n, int x, int A[])    {        int mn = A[0], mx = A[0];             // finding minimum and maximum values        for (int i = 0; i < n; ++i) {            mn = Math.min(mn, A[i]);            mx = Math.max(mx, A[i]);        }             // returning minimum possible difference        return Math.max(0, mx - mn - 2 * x);    }         // Driver program    public static void main(String []args)    {             int n = 3, x = 3;        int A[] = { 1, 3, 6 };             // function to return the answer        System.out.println(minDiff(n, x, A));                  } } // This code is contributed by ihritik

## Python3

 # Python program to find the minimum difference.      # Function to return required minimum differencedef minDiff( n,  x,  A):      mn =  A[0]    mx =  A[0]     # finding minimum and maximum values    for i in range(0,n):         mn = min( mn,  A[ i])         mx = max( mx,  A[ i])           # returning minimum possible difference    return max(0,  mx -  mn - 2 *  x)       # Driver program n = 3x = 3A = [1, 3, 6 ] # function to return the answerprint(minDiff( n,  x,  A)) # This code is contributed by ihritik

## C#

 // C# program to find the minimum difference. using System;class GFG{         // Function to return required minimum difference    static int minDiff(int n, int x, int []A)    {        int mn = A[0], mx = A[0];             // finding minimum and maximum values        for (int i = 0; i < n; ++i) {            mn = Math.Min(mn, A[i]);            mx = Math.Max(mx, A[i]);        }             // returning minimum possible difference        return Math.Max(0, mx - mn - 2 * x);    }         // Driver program    public static void Main()    {             int n = 3, x = 3;        int []A = { 1, 3, 6 };             // function to return the answer        Console.WriteLine(minDiff(n, x, A));                }} // This code is contributed by ihritik

## PHP

 

## Javascript

 

Output:

0

Time Complexity: O(n)

My Personal Notes arrow_drop_up