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.
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> |
0
Complexity Analysis:
- Time Complexity: O(n)
- Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!