Make all elements of an Array equal by adding or subtracting at most K

12 Jun, 2022
Given an array arr[] containing positive integers of size N and an integer K, the task is to make all the elements in the array equal to some value D (D > 0) such that |arr[i] – D| ≤ K. Print the value of D or -1 if it is not possible to make the array equal. Examples:  
Input: arr[] = {1, 2, 3, 4, 5}, K = 2 Output: 3 Explanation: All the elements in the array can be made equal to 3 as: |arr[0] – 3| = 2 ≤ 2 |arr[1] – 3| = 1 ≤ 2 |arr[2] – 3| = 0 ≤ 2 |arr[3] – 3| = 1 ≤ 2 |arr[4] – 3| = 2 ≤ 2 Input: arr[] = {1, 6, 20}, K = 1 Output: -1 Explanation: It is not possible to equalize the array  
 
Approach: The idea is to first find the minimum element of the array.  
If M is the minimum element of the array, then M + K is the maximum possible value which this minimum element can take in order to satisfy the condition arr[i] – D ≤ K.
Then, D = M + K, if for all the elements in the array, (M + K) lies in the range [arr[i] – K, arr[i] + K].
Therefore, we simply iterate over every element in the array and check for this condition.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ program to make all elements// of an Array equal by adding or// subtracting at most K #include <bits/stdc++.h>using namespace std; // Function to equalize the array by// adding or subtracting at most K// value from each elementint equalize(int arr[], int n, int k){     // Finding the minimum element    // from the array    int min_ele        = *min_element(arr, arr + n);     // Boolean variable to check if the    // array can be equalized or not    bool flag = true;     // Traversing the array    for (int i = 0; i < n; i++) {         // Checking if the values lie        // within the possible range        // for each element        if (!((arr[i] + k) >= min_ele + k              && min_ele + k >= (arr[i] - k))) {             // If any value doesn't lie in            // the range then exit the loop            flag = false;            break;        }    }     if (flag) {         // Value after equalizing the array        return min_ele + k;    }     // Array cannot be equalized    else        return -1;} // Driver codeint main(){    int K = 2;    int arr[] = { 1, 2, 3, 4, 5 };    int N = sizeof(arr) / sizeof(arr[0]);     cout << equalize(arr, N, K);}
// Java program to make all elements// of an Array equal by adding or// subtracting at most Kimport java.util.*; class GFG{  // Function to equalize the array by// adding or subtracting at most K// value from each elementstatic int equalize(int arr[], int n, int k){      // Finding the minimum element    // from the array    int min_ele        = Arrays.stream(arr).min().getAsInt();      // Boolean variable to check if the    // array can be equalized or not    boolean flag = true;      // Traversing the array    for (int i = 0; i < n; i++) {          // Checking if the values lie        // within the possible range        // for each element        if (!((arr[i] + k) >= min_ele + k              && min_ele + k >= (arr[i] - k))) {              // If any value doesn't lie in            // the range then exit the loop            flag = false;            break;        }    }      if (flag) {          // Value after equalizing the array        return min_ele + k;    }      // Array cannot be equalized    else        return -1;}  // Driver codepublic static void main(String[] args){    int K = 2;    int arr[] = { 1, 2, 3, 4, 5 };    int N = arr.length;      System.out.print(equalize(arr, N, K));}} // This code is contributed by Princi Singh
# Python program to make all elements# of an Array equal by adding or# subtracting at most K # Function to equalize the array by# adding or subtracting at most K# value from each elementdef equalize(arr, n, k):     # Finding the minimum element    # from the array    min_ele = min(arr);     # Boolean variable to check if the    # array can be equalized or not    flag = True;     # Traversing the array    for i in range(n):         # Checking if the values lie        # within the possible range        # for each element        if (not((arr[i] + k) >= (min_ele + k) and            (min_ele + k) >= (arr[i] - k))) :             # If any value doesn't lie in            # the range then exit the loop            flag = False;            break;     if (flag):         # Value after equalizing the array        return min_ele + k;         # Array cannot be equalized    else:        return -1; # Driver codeif __name__=='__main__':     K = 2;    arr = [ 1, 2, 3, 4, 5] ;    N = len(arr)     print(equalize(arr, N, K)) # This code is contributed by Princi Singh
// C# program to make all elements// of an Array equal by adding or// subtracting at most Kusing System;using System.Linq; class GFG{   // Function to equalize the array by// adding or subtracting at most K// value from each elementstatic int equalize(int []arr, int n, int k){       // Finding the minimum element    // from the array    int min_ele = arr.Min();       // Boolean variable to check if the    // array can be equalized or not    bool flag = true;       // Traversing the array    for (int i = 0; i < n; i++) {           // Checking if the values lie        // within the possible range        // for each element        if (!((arr[i] + k) >= min_ele + k              && min_ele + k >= (arr[i] - k))) {               // If any value doesn't lie in            // the range then exit the loop            flag = false;            break;        }    }       if (flag) {           // Value after equalizing the array        return min_ele + k;    }       // Array cannot be equalized    else        return -1;}   // Driver codepublic static void Main(String[] args){    int K = 2;    int []arr = { 1, 2, 3, 4, 5 };    int N = arr.Length;       Console.Write(equalize(arr, N, K));}} // This code is contributed by Princi Singh
<script>// Javascript program to make all elements// of an Array equal by adding or// subtracting at most K  // Function to equalize the array by// adding or subtracting at most K// value from each elementfunction equalize(arr, n, k){     // Finding the minimum element    // from the array    let min_ele        = arr.sort((a, b) => a - b)[0];     // Boolean variable to check if the    // array can be equalized or not    let flag = true;     // Traversing the array    for (let i = 0; i < n; i++) {         // Checking if the values lie        // within the possible range        // for each element        if (!((arr[i] + k) >= min_ele + k            && min_ele + k >= (arr[i] - k))) {             // If any value doesn't lie in            // the range then exit the loop            flag = false;            break;        }    }     if (flag) {         // Value after equalizing the array        return min_ele + k;    }     // Array cannot be equalized    else        return -1;} // Driver code let K = 2;let arr = [ 1, 2, 3, 4, 5 ];let N = arr.length; document.write(equalize(arr, N, K)); // This code is contributed by _saurabh_jaiswal</script>
3
 
Time Complexity: O(n), to traverse the array where n is the size of the given array Auxiliary Space: O(1), as no extra space is used
princi singh
_saurabh_jaiswal
singhh3010
Arrays
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Count of subarrays with average K
Introduction to Data Structures
Window Sliding Technique
Find subarray with given sum | Set 1 (Nonnegative Numbers)
Next Greater Element
What is Data Structure: Types, Classifications and Applications
Merge Overlapping Intervals
Count of longest possible subarrays with sum not divisible by K
Find a triplet that sum to a given value
Remove duplicates from sorted array