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++
#include <bits/stdc++.h>
using namespace std;
bool isPossible( int n, int k, int arr[])
{
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 ;
}
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
import java.io.*;
class GFG
{
static boolean isPossible( int n, int k, int arr[])
{
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 ;
}
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" );
}
}
|
Python3
def isPossible(n, k, arr):
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
if __name__ = = '__main__' :
k = 8
arr = [ 1 , 2 , 3 , 4 ]
n = len (arr)
if (isPossible(n, k, arr)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG
{
static bool isPossible( int n,
int k, int []arr)
{
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 ;
}
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" );
}
}
|
PHP
<?php
function isPossible( $n , $k , $arr )
{
$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;
}
$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>
function isPossible(n, k, arr)
{
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 ;
}
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)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...