Find the number of operations required for all array elements to be equal

Examples :

Input : arr = [1, 6, 1, 1, 1];
Output : 4
Explanation : Since arr becomes [2, 2, 2, 2, 2] after distribution from max element.

Input : arr = [2, 2, 3];
Output : -1
Explanation : Here arr becomes [3, 3, 1] after distribution.

Algorithm :

  • Declare a temporary variable for store the number of operations performed.
  • Find the maximum element of the given array and store its index value.
  • Check if all elements are equal to the maximum element after n subtractions.
  • Again check that each element is equal to the other elements and return n.

Below is the implementation of the above approach:

C ++

// C ++ program for finding a number
// operations required to perform
// all array elements are equal
# include & lt; bits / stdc ++. h & gt;

using namespace std;

 
// Function for finding the maximum
// element of this array

int find_n ( int a [], int n)

int j = 0, k = 0, s = 0; 

 

int x = * max_element (a, a + n); 

int y = * min_element (a, a + n); 

for ( int i = 0; i & lt; n; i ++) 

 

  if (a [i] == x)

s = i; 

break

 

 

for ( int i = 0; i & lt; n; i ++) 

if (a [i]! = x & amp; & amp; a [i] & lt; = y & amp; & amp; a [i]! = 0) 

a [j] + = 1; 

a [s] - = 1; 

x - = 1; 

k + = 1; 

j + = 1; 

else if (a [i]! = 0) 

j + = 1; 

  

for ( int i = 0; i & lt; n; i ++) 

  if ( a [i]! = x) 

k = -1; 

break

  return k; 

 
// Driver code

int main () 

 

int a [] = { 1, 6, 1, 1, 1}; 

int n = sizeof (a) / sizeof (a [0]);

cout & lt; & lt; (find_n (a, n)); 

 

return 0;

 
// This code is provided by princiraj1992

Java

// Java program for finding the number
// operations required to perform
// all array elements are equal

 

import java.util.Arrays;

 

class GFG {

  
// Function for finding the maximum
// element of this array

static int find_n ( int [] a) {

  int j = 0 , k = 0 , s = 0 ;

 

int x = Arrays.stream (a) .max (). getAsInt ();

int y = Arrays.stream (a) .min (). getAsInt ();

for ( int i: a) {

if (a [i] == x) {

  s = i;

break ;

}

 

  }

for ( int i: a) {

if (i! = x & amp; & amp; i & lt; = y & amp; & amp; i! = 0 ) {

  a [j] + = 1 ;

a [s] - = 1 ;

x - = 1 ;

k + = 1 ;

j + = 1 ;

} else if (i! = 0 ) {

j + = 1 ;

}

}

  

for ( int i: a) {

if (a [i]! = x) {

k = - 1 ;

break ;

}

}

  return k;

}

// Driver code

  

  public static void main (String [] args) {

 

int [] a = { 1 , 6 , 1 , 1 , 1 };

System.out.println (find_n (a));

}

 
}

python3

# Python program to find the number
# operations required to perform
# all array elements are equal

 
# Maximum search function
# element of this array

def find_n (a):

j, k = 0 , 0

  

  x = max (a)

for i in range ( len (a)):

if (a [i] = = x):

  s = i

break

 

for i in a:

if (i! = x and i & lt; = min (a) and i! = `` ):

a [j] + = 1

a [s] - = 1

x - = 1

  k + = 1

j + = 1

elif (i! = `` ):

j + = 1

 

for i in range ( len (a)): 

if (a [i]! = x):

k = - 1

break

 

return k

 
Driver code

a = [ 1 , 6 , 1 , 1 , 1 ]

print (find_n (a))

C #

PHP

// C # program for finding the number
// operations required to perform
// all array elements are equal

using System;

using System.Linq;

 

class GFG

{

  
// Function for finding the maximum
// element of this array

static int find_n ( int [] a)

{

int j = 0, k = 0, s = 0;

 

int x = a.Max ();

int y = a.Min ();

foreach ( int i in a) 

{

if (a [i] == x)

{

s = i;

break ;

}

 

  }

 

foreach ( int i in a) 

  {

if (i! = x & amp; & amp; i & lt; = y & amp; & amp ; i! = 0)

{

a [j] + = 1;

a [s] - = 1;

x - = 1;

k + = 1;

j + = 1;

 

  else if (i! = 0)

{

j + = 1;

}

}

  

foreach ( int i in a) 

{

if (a [i]! = x)

{

k = -1;

break ;

}

}

  return k;

}

 
// Driver code

public static void Main ()

{

int [] a = {1, 6, 1, 1, 1 };

Console.Write (find_n (a));

}
}

 
// This code is provided by 29AjayKumar

& lt;? Php
/ / PHP program for finding the number
// operations required to perform all
// array elements Equal

 
// Function to find the maximum element
// this array

function find_n (& amp; $ a )

{

$ j = 0; 

$ k = 0;

 

$ x = max ( $ a );

for ( $ i = 0; $ i & lt; sizeof ( $ a ); $ i ++)

{

if ( $ a [ $ i ] == $ x )

{

$ s = $ i ;

break ;

}

}

  

for ( $ i = 0; $ i & lt; sizeof ( $ a ); $ i ++)

{

  if ( $ a [ $ i ]! = $ x and $ a [ $ i ] & lt; = min ( $ a ) and  

$ a [ $ i ]! = 0)

{

  $ a [ $ j ] + = 1;

$ a [ $ s ] - = 1;

code class = "plain">)

{

$ j = 0; 

$ k = 0;

 

$ x = max ( $ a );

for ( $ i = 0; $ i & lt; sizeof ( $ a ); $ i ++)

{

if ( $ a [ $ i ] == $ x )

{

$ s = $ i ;

break ;

}

}