Open In App

Minimum increment by k operations to make all elements equal

Last Updated : 19 May, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

You are given an array of n-elements, you have to find the number of operations needed to make all elements of array equal. Where a single operation can increment an element by k. If it is not possible to make all elements equal print -1.

Example : 

Input : arr[] = {4, 7, 19, 16},  k = 3
Output : 10

Input : arr[] = {4, 4, 4, 4}, k = 3
Output : 0

Input : arr[] = {4, 2, 6, 8}, k = 3
Output : -1

To solve this question we require to check whether all elements can became equal or not and that too only by incrementing k from elements value. For this we have to check that the difference of any two elements should always be divisible by k. If it is so, then all elements can become equal otherwise they can not became equal in any case by incrementing k from them. Also, the number of operations required can be calculated by finding value of (max – Ai)/k for all elements. where max is maximum element of array.

Algorithm : 

// iterate for all elements
for (int i=0; i<n; i++)
{
    // check if element can make equal to max
    //  or not if not then return -1
    if ((max - arr[i]) % k != 0 )
        return -1;

    // else update res for required operations
    else
        res += (max - arr[i]) / k ;
}

return res;

Implementation:

C++




// Program to make all array equal
#include <bits/stdc++.h>
using namespace std;
 
// function for calculating min operations
int minOps(int arr[], int n, int k)
{
    // max elements of array
    int max = *max_element(arr, arr + n);
    int res = 0;
 
    // iterate for all elements
    for (int i = 0; i < n; i++) {
 
        // check if element can make equal to
        // max or not if not then return -1
        if ((max - arr[i]) % k != 0)
            return -1;
 
        // else update res for required operations
        else
            res += (max - arr[i]) / k;
    }
 
    // return result
    return res;
}
 
// driver program
int main()
{
    int arr[] = { 21, 33, 9, 45, 63 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int k = 6;
    cout << minOps(arr, n, k);
    return 0;
}


Java




// Program to make all array equal
import java.io.*;
import java.util.Arrays;
 
class GFG {
    // function for calculating min operations
    static int minOps(int arr[], int n, int k)
    {
        // max elements of array
        int max = Integer.MIN_VALUE;
          for(int i=0; i<n; i++) {
            max = Math.max(max, arr[i]);
        }
        int res = 0;
 
        // iterate for all elements
        for (int i = 0; i < n; i++) {
 
            // check if element can make equal to
            // max or not if not then return -1
            if ((max - arr[i]) % k != 0)
                return -1;
 
            // else update res for required operations
            else
                res += (max - arr[i]) / k;
        }
 
        // return result
        return res;
    }
 
    // Driver program
    public static void main(String[] args)
    {
        int arr[] = { 21, 33, 9, 45, 63 };
        int n = arr.length;
        int k = 6;
        System.out.println(minOps(arr, n, k));
    }
}
 
// This code is contributed by vt_m


Python3




# Python3 Program to make all array equal
 
# function for calculating min operations
def minOps(arr, n, k):
 
    # max elements of array
    max1 = max(arr)
    res = 0
 
    # iterate for all elements
    for i in range(0, n):
 
        # check if element can make equal to
        # max or not if not then return -1
        if ((max1 - arr[i]) % k != 0):
            return -1
 
        # else update res for
        # required operations
        else:
            res += (max1 - arr[i]) / k
     
    # return result
    return int(res)
 
# driver program
arr = [21, 33, 9, 45, 63]
n = len(arr)
k = 6
print(minOps(arr, n, k))
 
# This code is contributed by
# Smitha Dinesh Semwal


C#




// C# program Minimum increment by
// k operations to make all elements equal.
using System;
 
class GFG {
     
    // function for calculating min operations
    static int minOps(int[] arr, int n, int k)
    {
         
        // max elements of array
        Array.Sort(arr);
        int max = arr[arr.Length - 1];
        int res = 0;
 
        // iterate for all elements
        for (int i = 0; i < n; i++) {
 
            // check if element can make
            // equal to max or not if not
            // then return -1
            if ((max - arr[i]) % k != 0)
                return -1;
 
            // else update res for required
            // operations
            else
                res += (max - arr[i]) / k;
        }
 
        // return result
        return res;
    }
 
    // Driver program
    public static void Main()
    {
        int[] arr = { 21, 33, 9, 45, 63 };
        int n = arr.Length;
        int k = 6;
 
        Console.Write(minOps(arr, n, k));
    }
}
 
// This code is contributed by nitin mittal.


PHP




<?php
// Program to make all array equal
 
// function for calculating
// min operations
function minOps($arr, $n, $k)
{
    // max elements of array
    $max = max($arr);
    $res = 0;
 
    // iterate for all elements
    for ($i = 0; $i < $n; $i++)
    {
 
        // check if element can
        // make equal to max or
        // not if not then return -1
        if (($max - $arr[$i]) % $k != 0)
            return -1;
 
        // else update res for
        // required operations
        else
            $res += ($max -
                     $arr[$i]) / $k;
    }
     
    // return result
    return $res;
}
 
// Driver Code
$arr = array(21, 33, 9, 45, 63);
$n = count($arr);
$k = 6;
print (minOps($arr, $n, $k));
 
// This code is contributed
// by Manish Shaw(manishshaw1)
?>


Javascript




<script>
 
// Program to make all array equal
 
// function for calculating min operations
function minOps(arr, n, k)
{
    // max elements of array
    var max = arr[0];
     
    for(var i=0; i<arr.length; i++)
    {
        if(arr[i]>max)
            max = arr[i];
    }
    var res = 0;
 
    // iterate for all elements
    for (var i = 0; i < n; i++) {
 
        // check if element can make equal to
        // max or not if not then return -1
        if ((max - arr[i]) % k != 0)
            return -1;
 
        // else update res for required operations
        else
            res += (max - arr[i]) / k;
    }
 
    // return result
    return res;
}
 
// driver program
var arr = [ 21, 33, 9, 45, 63 ];
var n = arr.length;
var k = 6;
document.write( minOps(arr, n, k));
 
// This code is contributed by rutvik_56.
</script>


Output

24

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



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads