Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Find K such that repeated subtraction of K from Array elements make the Array equal

  • Difficulty Level : Medium
  • Last Updated : 27 Oct, 2021

Given an array arr[] of size N, the task is to find the value of an integer K such that its repeated subtraction from array elements will make all array elements in minimum operations.

Example:

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Input: arr[] = {5, 3, 3, 7}
Output: 2
Explanation: Minimum 2 operations must be performed:
1st operation: subtract 2 from elements at indices {0, 3}, arr[] = {3, 3, 3, 5}
2nd operation: subtract 2 from element at index 3, arr[] = {3, 3, 3, 3}
So, the value of K = 2



Input: arr[] = {-1, 0, -1, 0, -1}
Output: 1

 

Approach: To make all elements in the array arr equal, all elements need to be changed to the smallest value in the array. So, the gcd of the difference of all array elements to the smallest element will be the value of K. Now, to solve the following problem, follow the below steps:

  1. Create a variable mn to store the minimum element in the array arr.
  2. Now, traverse the array arr and find the gcd of the differences between all array elements and mn. Store this value in a variable K.
  3. Return K, as the answer to this question.

Below is the implementation of the above approach:

C++




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the value to be
// subtracted from array elements
// to make all elements equal
int findtheValue(int arr[], int N)
{
    // Miniumum element in the array
    int mn = *min_element(arr, arr + N);
 
    int K = arr[0] - mn;
 
    // Traverse the array to find the gcd
    // of the differences between
    // all array elements and mn
    for (int i = 1; i < N; ++i) {
        K = __gcd(K, arr[i] - mn);
    }
 
    return K;
}
 
// Driver Code
int main()
{
    int arr[] = { 5, 3, 3, 7 };
    int N = sizeof(arr) / sizeof(arr[0]);
    cout << findtheValue(arr, N);
 
    return 0;
}


Java




// Java program for the above approach
class GFG {
 
    static int gcd(int a, int b)
    {
        if (b == 0)
            return a;
        return gcd(b, a % b);
    }
 
    public static int getMin(int[] inputArray){
        int minValue = inputArray[0];
        for(int i = 1; i < inputArray.length; i++){
          if(inputArray[i] < minValue){
            minValue = inputArray[i];
          }
        }
        return minValue;
      }
 
    // Function to find the value to be
    // subtracted from array elements
    // to make all elements equal
    static int findtheValue(int[] arr, int N)
    {
        // Miniumum element in the array
        int mn = getMin(arr);
        int K = arr[0] - mn;
      
        // Traverse the array to find the gcd
        // of the differences between
        // all array elements and mn
        for (int i = 1; i < N; ++i) {
            K = gcd(K, arr[i] - mn);
            
        }
 
        return K;
    }
 
    // Driver Code
    public static void main(String args[])
    {
        int[] arr = { 5, 3, 3, 7 };
        int N = arr.length;
        System.out.println(findtheValue(arr, N));
    }
}
 
// This code is contributed by saurabh_jaiswal.


Python3




# python program for the above approach
import math
 
# Function to find the value to be
# subtracted from array elements
# to make all elements equal
 
 
def findtheValue(arr, N):
 
    # Miniumum element in the array
    mn = min(arr)
 
    K = arr[0] - mn
 
    # Traverse the array to find the gcd
    # of the differences between
    # all array elements and mn
    for i in range(1, N):
        K = math.gcd(K, arr[i] - mn)
 
    return K
 
 
# Driver Code
if __name__ == "__main__":
 
    arr = [5, 3, 3, 7]
    N = len(arr)
    print(findtheValue(arr, N))
 
# This code is contributed by rakeshsahni


C#




// C# program for the above approach
using System;
using System.Linq;
class GFG {
 
    static int gcd(int a, int b)
    {
        if (b == 0)
            return a;
        return gcd(b, a % b);
    }
 
    // Function to find the value to be
    // subtracted from array elements
    // to make all elements equal
    static int findtheValue(int[] arr, int N)
    {
        // Miniumum element in the array
        int mn = arr.Min();
        int K = arr[0] - mn;
      
        // Traverse the array to find the gcd
        // of the differences between
        // all array elements and mn
        for (int i = 1; i < N; ++i) {
            K = gcd(K, arr[i] - mn);
            
        }
 
        return K;
    }
 
    // Driver Code
    public static void Main()
    {
        int[] arr = { 5, 3, 3, 7 };
        int N = arr.Length;
        Console.WriteLine(findtheValue(arr, N));
    }
}
 
// This code is contributed by ukasp.


Javascript




<script>
// JavaScript program for the above approach
 let gcd = function(a, b) {
  if (!b) {
    return a;
  }
 
  return gcd(b, a % b);
}
// Function to find the value to be
// subtracted from array elements
// to make all elements equal
function findtheValue(arr, N)
{
 
    // Miniumum element in the array
    let mn = Math.min(...arr)
 
    let K = arr[0] - mn;
 
    // Traverse the array to find the gcd
    // of the differences between
    // all array elements and mn
    for (let i = 1; i < N; ++i) {
        K = gcd(K, arr[i] - mn);
    }
 
    return K;
}
 
// Driver Code
let arr = [ 5, 3, 3, 7 ]
let N = arr.length
document.write(findtheValue(arr, N))
 
// This code is contributed by rohitsingh07052.
</script>


 
 

Output

2

 

Time Complexity: O(Nlog(mn))
Auxiliary Space: O(1)

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!