📌  相关文章
📜  通过添加或减去至多 K 使数组的所有元素相等

📅  最后修改于: 2021-09-07 02:13:35             🧑  作者: Mango

给定一个包含大小为N 的正整数和一个整数K的数组arr[] ,任务是使数组中的所有元素等于某个值D (D > 0)使得|arr[i] – D| ≤ K 。如果无法使数组相等,则打印D-1的值。
例子:

方法:思路是先找到数组的最小元素。

  • 如果M是数组的最小元素,则M + K是该最小元素为满足条件arr[i] – D ≤ K可以采用的最大可能值。
  • 然后, D = M + K ,如果对于数组中的所有元素, (M + K) 位于[arr[i] – K, arr[i] + K] 范围内
  • 因此,我们只需遍历数组中的每个元素并检查这种情况。

下面是上述方法的实现:

C++
// C++ program to make all elements
// of an Array equal by adding or
// subtracting at most K
 
#include 
using namespace std;
 
// Function to equalize the array by
// adding or subtracting at most K
// value from each element
int 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 code
int main()
{
    int K = 2;
    int arr[] = { 1, 2, 3, 4, 5 };
    int N = sizeof(arr) / sizeof(arr[0]);
 
    cout << equalize(arr, N, K);
}


Java
// Java program to make all elements
// of an Array equal by adding or
// subtracting at most K
import java.util.*;
 
class GFG{
  
// Function to equalize the array by
// adding or subtracting at most K
// value from each element
static 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 code
public 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


Python3
# 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 element
def 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 code
if __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#
// C# program to make all elements
// of an Array equal by adding or
// subtracting at most K
using System;
using System.Linq;
 
class GFG{
   
// Function to equalize the array by
// adding or subtracting at most K
// value from each element
static 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 code
public 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


Javascript


输出:
3

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live