Minimum number of increment-other operations to make all array elements equal.

23 May, 2022
We are given an array consisting of n elements. At each operation you can select any one element and increase rest of n-1 elements by 1. You have to make all elements equal performing such operation as many times you wish. Find the minimum number of operations needed for this.Examples:  
Input : arr[] = {1, 2, 3}
Output : Minimum Operation = 3
Explanation : 
operation | increased elements | after increment
    1     |    1, 2            | 2, 3, 3
    2     |    1, 2            | 3, 4, 3
    3     |    1, 3            | 4, 4, 4

Input : arr[] = {4, 3, 4}
Output : Minimum Operation = 2
Explanation : 
operation | increased elements | after increment
     1    |    1, 2           | 5, 4, 4
     2    |    2, 3           | 5, 5, 5
 
Brute force : A simple way to make all elements equal is that at each step find the largest elements and then increase all rest n-1 elements by 1. We should keep doing this operation till all elements become equal. Time Complexity : O(n^2)Better Approach : If we took a closer look at each operation as well problem statement we will find that increasing all n-1 element except the largest one is similar to decreasing the largest element only. So, the smallest elements need not to decrease any more and rest of elements will got decremented upto smallest one. In this way the total number of operation required for making all elements equal will be arraySum – n * (smallestElement). Time complexity will be same as that of finding smallest elements and array sum i.e. O(n).  
// find array sum
sum = arraySum (int arr[], int n);

// find the smallest element from array
small = smallest (int arr, int n);

// calculate min operation required
minOperation = sum - (n * small);

// return result
return minOperation;
 
C++
C++
C
Java
Python3
C#
PHP
Javascript
// CPP for finding minimum operation required#include <bits/stdc++.h>using namespace std; // function for finding array sumint arraySum(int arr[], int n){    int sum = 0;    for (int i = 0; i < n; i++)        sum += arr[i];    return sum;} // function for finding smallest elementint smallest(int arr[], int n){    int small = INT_MAX;    for (int i = 0; i < n; i++)        if (arr[i] < small)            small = arr[i];    return small;} // function for finding min operationint minOp(int arr[], int n){    // find array sum    int sum = arraySum(arr, n);    // find the smallest element from array    int small = smallest(arr, n);    // calculate min operation required    int minOperation = sum - (n * small);    // return result    return minOperation;} // driver functionint main(){    int arr[] = { 5, 6, 2, 4, 3 };    int n = sizeof(arr) / sizeof(arr[0]);    cout << "Minimum Operation = " << minOp(arr, n);    return 0;} // This code is contributed by Sania Kumari Gupta
// [STL] - CPP for finding minimum operation required#include<bits/stdc++.h>using namespace std; // function for finding min operationint minOp (int arr[], int n){    // find array sum    int sum = accumulate(arr,arr+n,0);    // find the smallest element from array    int small = *min_element(arr,arr+n);    // calculate min operation required    int minOperation = sum - (n * small);    // return result    return minOperation;} //driver functionint main(){    int arr[] = {5, 6, 2, 4, 3};    int n = sizeof(arr)/ sizeof(arr[0]);    cout << "Minimum Operation = " << minOp (arr, n);    return 0;} // This code is contributed by Sania Kumari Gupta
// C for finding minimum operation required#include <limits.h>#include <stdio.h> // function for finding array sumint arraySum(int arr[], int n){    int sum = 0;    for (int i = 0; i < n; i++)        sum += arr[i];    return sum;} // function for finding smallest elementint smallest(int arr[], int n){    int small = INT_MAX;    for (int i = 0; i < n; i++)        if (arr[i] < small)            small = arr[i];    return small;} // function for finding min operationint minOp(int arr[], int n){    // find array sum    int sum = arraySum(arr, n);    // find the smallest element from array    int small = smallest(arr, n);    // calculate min operation required    int minOperation = sum - (n * small);    // return result    return minOperation;} // driver functionint main(){    int arr[] = { 5, 6, 2, 4, 3 };    int n = sizeof(arr) / sizeof(arr[0]);    printf("Minimum Operation = %d", minOp(arr, n));    return 0;} // This code is contributed by Sania Kumari Gupta
// Java program to find min operationimport java.io.*; class minOperation {    // Function to print minimum operation required to make    // all elements of an array equal    static void printMinOp(int arr[])    {        int arraySum, smallest, arr_size = arr.length;        arraySum = 0;        smallest = arr[0];        for (int i = 0; i < arr_size; i++) {            // If current element is smaller than update smallest            if (arr[i] < smallest)                smallest = arr[i];             // find array sum            arraySum += arr[i];        }         int minOperation = arraySum - arr_size * smallest;         // Print min operation required        System.out.println("Minimum Operation = " + minOperation);    }     // Driver program to test above functions    public static void main(String[] args)    {        int arr[] = { 5, 6, 2, 4, 3 };        printMinOp(arr);    }} // This code is contributed by Sania Kumari Gupta
# Python 3 for finding minimum# operation required # function for finding min# operationdef minOp (arr, n) :         # find array sum    sm = sum(arr)     # find the smallest element from    # array    small = min(arr)     # calculate min operation required    minOperation = sm - (n * small)     # return result    return minOperation     # Driver functionarr = [5, 6, 2, 4, 3]n = len(arr)print( "Minimum Operation = ", minOp (arr, n)) # This code is contributed by Shubham Singh
// C# program to find min operationusing System; class GFG {         /* Function to print minimum    operation required to make all    elements of an array equal */    static void printMinOp(int []arr)    {        int arraySum, smallest,        arr_size = arr.Length;        arraySum = 0;        smallest = arr[0];                 for (int i = 0; i < arr_size ; i ++)        {            /* If current element is            smaller than update smallest */            if (arr[i] < smallest)                        smallest = arr[i];                     /*find array sum */            arraySum += arr[i];        }         int minOperation = arraySum -                         arr_size * smallest;         /* Print min operation required */        Console.Write("Minimum Operation = " +                            minOperation);    }     /* Driver program to test above    functions */    public static void Main ()    {        int []arr = {5, 6, 2, 4, 3};                 printMinOp(arr);    }} // This code is contributed by nitin mittal.
<?php// PHP for finding minimum operation required // function for finding array sumfunction arraySum ($arr, $n){    $sum = 0;    for ($i = 0; $i < $n; $sum += $arr[$i++]);    return $sum;} // function for finding smallest elementfunction smallest ($arr, $n){    $small = PHP_INT_MAX;    for ($i = 0; $i < $n; $i++)        if ($arr[$i] < $small)            $small = $arr[$i];    return $small;} // function for finding min operationfunction minOp ($arr, $n){         // find array sum    $sum = arraySum ($arr, $n);     // find the smallest    // element from array    $small = smallest ($arr, $n);     // calculate min operation    // required    $minOperation = $sum - ($n * $small);     // return result    return $minOperation;}     // Driver Code    $arr = array (5, 6, 2, 4, 3);    $n = sizeof($arr);    echo "Minimum Operation = " , minOp ($arr, $n);     // This code is contributed by m_kit?>
<script>// javascript program to find min operationclass minOeration{    /*     * Function to print minimum operation     required to make all elements of an array     * equal     */    function printMinOp(arr)    {        var arraySum, smallest, arr_size = arr.length;        arraySum = 0;        smallest = arr[0];        for (i = 0; i < arr_size; i++)        {                     /*             * If current element is smaller than update smallest             */            if (arr[i] < smallest)                smallest = arr[i];             /* find array sum */            arraySum += arr[i];        }         var minOperation = arraySum - arr_size * smallest;         /* Print min operation required */        document.write("Minimum Operation = " + minOperation);     }     /* Driver program to test above functions */        var arr = [ 5, 6, 2, 4, 3 ];        printMinOp(arr); // This code is contributed by aashish1995</script>
Minimum Operation = 10
Time Complexity: O(N), where N represents the size of the given array.
Auxiliary Space: O(1), no extra space is required, so it is a constant.
This article is contributed by Shivam Pradhan (anuj_charm). If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
nitin mittal
jit_t
aashish1995
alreadytaken
ankita_saini
krisania804
tamanna17122007
Flipkart
Arrays
Flipkart
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Multidimensional Arrays in Java
Given an array A[] and a number x, check for pair in A[] with sum as x (aka Two Sum)
Introduction to Arrays
K'th Smallest/Largest Element in Unsorted Array | Set 1
Subset Sum Problem | DP-25
Introduction to Data Structures
Python | Using 2D arrays/lists the right way
Find Second largest element in an array
Search an element in a sorted and rotated array
Find the Missing Number