Minimum increment and decrement by K of each pair elements required to make all array elements equal

• Difficulty Level : Easy
• Last Updated : 22 Apr, 2021

Given an array arr[], the task is to check if it is possible to make all array elements equal by repeatedly choosing a triplet (i, j, k), where i and j are different, and subtract k from arr[i] and add k to arr[j].

Examples:

Input: arr[] = {1, 5, 6, 4}
Output: Yes
Explanation:
Operations performed:
Choose i = 2, j = 0, k = 2 and perform the given operations. The array arr[] modifies to {3, 5, 4, 4}.
Choose i = 1, j = 0, k = 1 and perform the given operations. The array arr[] modifies to {4, 4, 4, 4}.
Now, all array elements are equal. Therefore, print Yes.

Input: arr[] = {2, 5, 3, 2, 2}
Output: No

Naive Approach: The simplest approach is based on the observation that the sum of the modified array will be equal to the sum of the initial array. Follow the steps below to solve this problem:

• Considering Y to be the value of all the array elements after making all array elements equal. Therefore, Y * N ( where N is the array size) must be equal to sum of the given array.
• Iterate up to the maximum value in the array and check for the possible value of Y. If found to be satisfying given conditions, print “Yes”. Otherwise, print “No”.

Proof:

• Choose some i, j and k at any step.
• Assume sum of the array elements to be equal to sum.
• Sum of array elements after removing arr[i] and arr[j] is sum – arr[i] – arr[j].
• Now, adding arr[i] – k and arr[j] + k into the array modifies the sum of the array to sum – arr[i] – arr[j] + arr[i] – k + arr[j] + k = sum.

Time Complexity: O(max(arr[i]))
Auxiliary Space: O(1)

Efficient Approach: The optimal idea is to check whether the sum of the given array is a factor of N or not. Follow the steps below to solve the problem:

• Assuming that the array elements modifies to X after all array elements are made equal, X should be an integer such that the sum of the array is divisible by N.
• If the sum is not divisible by N, then X would not be an integer, and it’s not possible to make all array elements equal. If not found to be an integer, print “No“. Otherwise, print “Yes”.

Below is the implementation of the above approach:

C++

 // C++ program for the above approach #include using namespace std; // Function to check if its possible to// make all array elements equal or notvoid arrayElementEqual(int arr[], int N){    // Stores the sum of the array    int sum = 0;     // Traverse the array    for (int i = 0; i < N; i++) {        sum += arr[i];    }     // If sum is divisible by N    if (sum % N == 0) {        cout << "Yes";    }     // Otherwise, not possible to make    // all array elements equal    else {        cout << "No" << endl;    }} // Driver Codeint main(){    // Given array    int arr[] = { 1, 5, 6, 4 };     // Size of the array    int N = sizeof(arr) / sizeof(arr);     arrayElementEqual(arr, N);}

Java

 // Java program for the above approachimport java.util.*; class GFG{ // Function to check if its possible to// make all array elements equal or notstatic void arrayElementEqual(int arr[], int N){       // Stores the sum of the array    int sum = 0;     // Traverse the array    for (int i = 0; i < N; i++)    {        sum += arr[i];    }     // If sum is divisible by N    if (sum % N == 0)    {        System.out.print("Yes");    }     // Otherwise, not possible to make    // all array elements equal    else    {        System.out.print("No" +"\n");    }} // Driver Codepublic static void main(String[] args){       // Given array    int arr[] = { 1, 5, 6, 4 };     // Size of the array    int N = arr.length;    arrayElementEqual(arr, N);}} // This code is contributed by 29AjayKumar

Python3

 # Python program for the above approach # Function to check if its possible to# make all array elements equal or notdef arrayElementEqual(arr, N):       # Stores the sum of the array    sum = 0     # Traverse the array    for i in range(N):        sum += arr[i]         # If sum is divisible by N    if (sum % N == 0):        print('Yes')     # Otherwise, not possible to make    # all array elements equal    else:        print("No") # Driver Code# Given arrayarr = [ 1, 5, 6, 4 ] # Size of the arrayN = len(arr)arrayElementEqual(arr, N) # This code is contributed by rohitsingh07052

C#

 // C# program for the above approachusing System;using System.Collections.Generic; public class GFG{ // Function to check if its possible to// make all array elements equal or notstatic void arrayElementEqual(int[] arr, int N){       // Stores the sum of the array    int sum = 0;     // Traverse the array    for (int i = 0; i < N; i++)    {        sum += arr[i];    }     // If sum is divisible by N    if (sum % N == 0)    {        Console.WriteLine("Yes");    }     // Otherwise, not possible to make    // all array elements equal    else    {        Console.Write("No" +"\n");    }}  // Driver Codestatic public void Main(){     // Given array    int[] arr = { 1, 5, 6, 4 };     // Size of the array    int N = arr.Length;    arrayElementEqual(arr, N);}} // This code is contributed by sanjoy_62.

Javascript



Output:
Yes

Time Complexity: O(N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up