Make all elements of an array equal with the given operation
Last Updated :
15 Sep, 2022
Given an array arr[] of n integers and an integer k. The task is to make all the elements of arr[] equal with the given operation. In a single operation, any non-negative number x ? k (can be a floating point value) can be added to any element of the array and k will be updated as k = k - x. Print Yes is possible else print No.
Examples:
Input: k = 8, arr[] = {1, 2, 3, 4}
Output: Yes
1 + 3.5 = 4.5
2 + 2.5 = 4.5
3 + 1.5 = 4.5
4 + 0.5 = 4.5
3.5 + 2.5 + 1.5 + 0.5 = 8 = k
Input: k = 2, arr[] = {1, 2, 3, 4}
Output: -1
Approach: Since the task is to make all elements of the array equal and the total of additions has to be exactly k. There is only a single value at which we can make them all of these elements equal i.e. (sum(arr) + k) / n. If there is an element in the array which is already greater than this value then the answer does not exist otherwise print Yes.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
// Function that returns true if all the elements
// of the array can be made equal
// with the given operation
bool isPossible(int n, int k, int arr[])
{
// To store the sum of the array elements
// and the maximum element from the array
int sum = arr[0], maxVal = arr[0];
for (int i = 1; i < n; i++) {
sum += arr[i];
maxVal = max(maxVal, arr[i]);
}
if ((float)maxVal > (float)(sum + k) / n)
return false;
return true;
}
// Driver code
int main()
{
int k = 8;
int arr[] = { 1, 2, 3, 4 };
int n = sizeof(arr) / sizeof(arr[0]);
if (isPossible(n, k, arr))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
//Java implementation of the approach
import java.io.*;
class GFG
{
// Function that returns true if all
// the elements of the array can be
// made equal with the given operation
static boolean isPossible(int n, int k, int arr[])
{
// To store the sum of the array elements
// and the maximum element from the array
int sum = arr[0];
int maxVal = arr[0];
for (int i = 1; i < n; i++)
{
sum += arr[i];
maxVal = Math.max(maxVal, arr[i]);
}
if ((float)maxVal > (float)(sum + k) / n)
return false;
return true;
}
// Driver code
public static void main (String[] args)
{
int k = 8;
int arr[] = { 1, 2, 3, 4 };
int n = arr.length;
if (isPossible(n, k, arr))
System.out.println ("Yes");
else
System.out.println( "No");
}
}
// This code is contributed by @Tushil.
Python3
# Python 3 implementation of the approach
# Function that returns true if all
# the elements of the array can be
# made equal with the given operation
def isPossible(n, k, arr):
# To store the sum of the array elements
# and the maximum element from the array
sum = arr[0]
maxVal = arr[0];
for i in range(1, n):
sum += arr[i]
maxVal = max(maxVal, arr[i])
if (int(maxVal)> int((sum + k) / n)):
return False
return True
# Driver code
if __name__ == '__main__':
k = 8
arr = [1, 2, 3, 4]
n = len(arr)
if (isPossible(n, k, arr)):
print("Yes")
else:
print("No")
# This code is contributed by
# Surendra_Gangwar
C#
// C# implementation of the approach
using System;
class GFG
{
// Function that returns true if all
// the elements of the array can be
// made equal with the given operation
static bool isPossible(int n,
int k, int []arr)
{
// To store the sum of the array elements
// and the maximum element from the array
int sum = arr[0];
int maxVal = arr[0];
for (int i = 1; i < n; i++)
{
sum += arr[i];
maxVal = Math.Max(maxVal, arr[i]);
}
if ((float)maxVal > (float)(sum + k) / n)
return false;
return true;
}
// Driver code
public static void Main()
{
int k = 8;
int []arr = { 1, 2, 3, 4 };
int n = arr.Length;
if (isPossible(n, k, arr))
Console.WriteLine("Yes");
else
Console.WriteLine( "No");
}
}
// This code is contributed by Ryuga
PHP
<?php
// PHP implementation of the approach
// Function that returns true if
// all the elements of the array
// can be made equal with the given operation
function isPossible($n, $k, $arr)
{
// To store the sum of the array elements
// and the maximum element from the array
$sum = $arr[0];
$maxVal = $arr[0];
for ($i = 1; $i < $n; $i++)
{
$sum += $arr[$i];
$maxVal = max($maxVal, $arr[$i]);
}
if ((float)$maxVal > (float)($sum + $k) / $n)
return false;
return true;
}
// Driver code
$k = 8;
$arr = array( 1, 2, 3, 4 );
$n = sizeof($arr) / sizeof($arr[0]);
if (isPossible($n, $k, $arr))
echo "Yes";
else
echo "No";
# This code is contributed by akt_miit.
?>
JavaScript
<script>
// Javascript implementation of the above approach
// Function that returns true if all
// the elements of the array can be
// made equal with the given operation
function isPossible(n, k, arr)
{
// To store the sum of the array elements
// and the maximum element from the array
let sum = arr[0];
let maxVal = arr[0];
for (let i = 1; i < n; i++)
{
sum += arr[i];
maxVal = Math.max(maxVal, arr[i]);
}
if (maxVal > (sum + k) / n)
return false;
return true;
}
// driver program
let k = 8;
let arr = [ 1, 2, 3, 4 ];
let n = arr.length;
if (isPossible(n, k, arr))
document.write ("Yes");
else
document.write( "No");
</script>
Complexity Analysis:
- Time Complexity: O(n)
- Auxiliary Space: O(1)
Similar Reads
Make all the elements of equal by using given operation Given an array A[] of length N, the task is to return the minimum number of times the below-given operations are required to perform so that all elements become equal. If it is not possible then return -1. Choose two distinct indices i and j. Such that A[i] > A[j]Let X = Ceil((A[i] - A[j])/2)Subt
8 min read
Minimum operation to make all elements equal in array Given an array consisting of n positive integers, the task is to find the minimum number of operations to make all elements equal. In each operation, we can perform addition, multiplication, subtraction, or division with any number and an array element. Examples: Input : arr[] = [1, 2, 3, 4]Output :
11 min read
Find if it is possible to make all elements of an array equal by the given operations Given an array arr[], the task is to make all the array elements equal with the given operation. In a single operation, any element of the array can be either multiplied by 3 or by 5 any number of times. If it's possible to make all the array elements equal with the given operation then print Yes el
7 min read
Find the number of operations required to make all array elements Equal Given an array of N integers, the task is to find the number of operations required to make all elements in the array equal. In one operation we can distribute equal weights from the maximum element to the rest of the array elements. If it is not possible to make the array elements equal after perfo
6 min read
Minimum Cost to make all array elements equal using given operations Given an array arr[] of positive integers and three integers A, R, M, where The cost of adding 1 to an element of the array is A,the cost of subtracting 1 from an element of the array is R andthe cost of adding 1 to an element and subtracting 1 from another element simultaneously is M. The task is t
12 min read