Minimum increment by k operations to make all elements equal

31 May, 2022
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;
 
C++
Java
Python3
C#
PHP
Javascript
// Program to make all array equal#include <bits/stdc++.h>using namespace std; // function for calculating min operationsint 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 programint 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;}
// Program to make all array equalimport 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        Arrays.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(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 Program to make all array equal # function for calculating min operationsdef 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 programarr = [21, 33, 9, 45, 63]n = len(arr)k = 6print(minOps(arr, n, k)) # This code is contributed by# Smitha Dinesh Semwal
// 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// Program to make all array equal // function for calculating// min operationsfunction 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)?>
<script> // Program to make all array equal // function for calculating min operationsfunction 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 programvar 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) 
nitin mittal
manishshaw1
niimisshhh_
rutvik_56
rishavnitro
simmytarika5
Arrays
Greedy
Searching
Arrays
Searching
Greedy
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Arrays in Java
Write a program to reverse an array or string
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Largest Sum Contiguous Subarray
Dijkstra's shortest path algorithm | Greedy Algo-7
Prim’s Minimum Spanning Tree (MST) | Greedy Algo-5
Write a program to print all permutations of a given string
Kruskal’s Minimum Spanning Tree Algorithm | Greedy Algo-2
Huffman Coding | Greedy Algo-3