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 isans = 0, also using the same modification.

Below is the implementation of above approach.

## CPP

`// 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

**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 industry experts, please refer **Geeks Classes Live**