Given an array arr[] of size N, the task is to make all elements equal by applying the operation given below any number of times (possibly zero) to any of the elements in the given array.
- Select an element in the array.
- Reduce it by a positive integer K.
Among all such positive k’s, print the maximum K.
Examples:
Input: arr[] = {3, 7, 5, 3, 3, 7}
Output: 2
Explanation: Choose K = 2, decrement both 7s twice and one 5 once. to get all the elements equal to 3Input: arr[] = {100, -2000, -2000, -2000}
Output: 2100Input: arr[] = {2, 2, 2}
Output: -1
Explanation: As all the elements are already equal hence there can be infinite number of such K possible.
Approach: The task can be solved on the basis of some observations. All the array elements can be made equal to the minimum element of the array. The maximum K can be obtained by finding the greatest common divisor of the adjacent elements in sorted order.
Below is the implementation of the above approach:
// C++ program for the above approach #include <bits/stdc++.h> using namespace std;
// Function to find the maximum value of K int maxValue( int arr[], int N)
{ // Sorting array of integers
sort(arr, arr + N);
// Initializing a variable
int ans = 0;
// Iterating using a for loop
for ( int i = 1; i < N; i++) {
// Find the gcd of ans and
// (arr[i] - arr[i - 1])
ans = __gcd(ans, arr[i] - arr[i - 1]);
}
// Return the answer
return ans;
} // Driver code int main()
{ // Initializing an array of integers
int arr[] = { 3, 7, 5, 3, 3, 7 };
// Number of elements in the array
int N = sizeof (arr) / sizeof ( int );
int ans = maxValue(arr, N);
if (ans > 0)
cout << ans;
else
cout << "-1" ;
return 0;
} |
// Java program for the above approach import java.io.*;
import java.lang.*;
import java.util.*;
import java.math.BigInteger;
class GFG {
//calculate gcd
static int gcd( int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}
// Function to find the maximum value of K
static int maxValue( int arr[], int N)
{
// Sorting array of integers
Arrays.sort(arr);
// Initializing a variable
int ans = 0 ;
// Iterating using a for loop
for ( int i = 1 ; i < N; i++) {
// Find the gcd of ans and
// (arr[i] - arr[i - 1])
ans = gcd(ans, arr[i] - arr[i - 1 ]);
}
// Return the answer
return ans;
}
// Driver code
public static void main (String[] args) {
int arr[] = { 3 , 7 , 5 , 3 , 3 , 7 };
// Number of elements in the array
int N = arr.length;
int ans = maxValue(arr, N);
if (ans > 0 )
System.out.println(ans);
else
System.out.println( "-1" );
}
} // This code is contributed by hrithikgarg03188. |
# Python program for the above approach # calculate gcd def gcd(a, b):
return a if b = = 0 else gcd(b, a % b);
# Function to find the maximum value of K def maxValue(arr, N):
# Sorting array of integers
arr.sort();
# Initializing a variable
ans = 0 ;
# Iterating using a for loop
for i in range ( 1 ,N):
# Find the gcd of ans and
# (arr[i] - arr[i - 1])
ans = gcd(ans, arr[i] - arr[i - 1 ]);
# Return the answer
return ans;
# Driver code if __name__ = = '__main__' :
arr = [ 3 , 7 , 5 , 3 , 3 , 7 ];
# Number of elements in the array
N = len (arr);
ans = maxValue(arr, N);
if (ans > 0 ):
print (ans);
else :
print ( "-1" );
# This code is contributed by shikhasingrajput |
// C# program for the above approach using System;
class GFG {
// JavaScript code for the above approach
static int __gcd( int a, int b)
{
// Everything divides 0
if (a == 0)
return b;
if (b == 0)
return a;
// base case
if (a == b)
return a;
// a is greater
if (a > b)
return __gcd(a - b, b);
return __gcd(a, b - a);
}
// Function to find the maximum value of K
static int maxValue( int [] arr, int N)
{
// Sorting array of integers
Array.Sort(arr);
// Initializing a variable
int ans = 0;
// Iterating using a for loop
for ( int i = 1; i < N; i++) {
// Find the gcd of ans and
// (arr[i] - arr[i - 1])
ans = __gcd(ans, arr[i] - arr[i - 1]);
}
// Return the answer
return ans;
}
public static void Main()
{
// Initializing an array of integers
int [] arr = { 3, 7, 5, 3, 3, 7 };
// Number of elements in the array
int N = arr.Length;
int ans = maxValue(arr, N);
if (ans > 0)
Console.Write(ans);
else
Console.Write(-1);
}
} // This code is contributed by Samim Hossain Mondal. |
<script> // JavaScript code for the above approach
function __gcd(a, b) {
// Everything divides 0
if (a == 0)
return b;
if (b == 0)
return a;
// base case
if (a == b)
return a;
// a is greater
if (a > b)
return __gcd(a - b, b);
return __gcd(a, b - a);
}
// Function to find the maximum value of K
function maxValue(arr, N)
{
// Sorting array of integers
arr.sort( function (a, b) { return a - b })
// Initializing a variable
let ans = 0;
// Iterating using a for loop
for (let i = 1; i < N; i++) {
// Find the gcd of ans and
// (arr[i] - arr[i - 1])
ans = __gcd(ans, arr[i] - arr[i - 1]);
}
// Return the answer
return ans;
}
// Driver code
// Initializing an array of integers
let arr = [3, 7, 5, 3, 3, 7];
// Number of elements in the array
let N = arr.length;
let ans = maxValue(arr, N);
if (ans > 0)
document.write(ans);
else
document.write(-1)
// This code is contributed by Potta Lokesh
</script>
|
2
Time Complexity: O(N * logN)
Auxiliary Space: O(1)