Open In App

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

Last Updated : 07 Sep, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

Given an array A of n integers and integer X. You may choose any integer between -X\leq k\leq X    , and add k to A[i] for each 0\leq i \leq n-1    . 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. 

C++
// C++ program to find the minimum difference.
#include <bits/stdc++.h>
using namespace std;

// Function to return required minimum difference
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 = min(mn, A[i]);
        mx = max(mx, A[i]);
    }

    // returning minimum possible difference
    return max(0, mx - mn - 2 * x);
}

// Driver program
int 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 difference
def 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 = 3 
x = 3 
A = [1, 3, 6 ] 

# function to return the answer
print(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
<?php

// PHP program to find the minimum difference.

    
// Function to return required minimum difference
function minDiff($n, $x, $A)
{
    $mn = $A[0];
    $mx = $A[0];

    // finding minimum and maximum values
    for ($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 program

$n = 3;
$x = 3;
$A = array( 1, 3, 6 );

// function to return the answer
echo minDiff($n, $x, $A);

// This code is contributed by ihritik

?>
JavaScript
<script>

// JavaScript program to find the minimum difference.

// Function to return required minimum difference
function  minDiff( n,  x, A)
{
    var mn = A[0], mx = A[0];

    // finding minimum and maximum values
    for (var 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);
}

var n = 3, x = 3;
var A = [ 1, 3, 6 ];

// function to return the answer
document.write( minDiff(n, x, A));

// This code is contributed by SoumikMondal

</script>

Output
0

Complexity Analysis:

  • Time Complexity: O(n)
  • Auxiliary Space: O(1)

Next Article
Article Tags :
Practice Tags :

Similar Reads