Minimize difference after changing all odd elements to even
Last Updated :
07 Aug, 2022
Given an array arr[] of N positive integers. We have to perform one operation on every odd element in the given array i.e., multiply every odd element by 2 in the given array, the task is to find the minimum difference between any two elements in the array after performing the given operation.
Examples:
Input: arr[] = {2, 8, 15, 29, 40}
Output: 1
Explanation:
Multiply the third element 15 by 2 so it will become 30.
Now you have 30 and 29, so the minimum difference will become 1.
Input: arr[] = { 3, 8, 13, 30, 50 }
Output : 2
Explanation:
Multiply 3 by 2 so it will become 6.
Now you have 6 and 8, so the minimum difference will become 2.
Approach:
- Convert every odd number in the given array to even by multiplying it by 2.
- Sort the given array in increasing order.
- Find the minimum difference between any two consecutive elements in the above-sorted array.
- The difference calculated above is the minimum difference between any two elements in the array after performing the given operation.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
#define ll long long
void minDiff(vector<ll> a, int n)
{
for ( int i = 0; i < n; i++) {
if (a[i] % 2 == 1)
a.push_back(a[i] * 2);
}
sort(a.begin(), a.end());
ll mindifference = a[1] - a[0];
for ( int i = 1; i < a.size(); i++) {
mindifference = min(mindifference,
a[i] - a[i - 1]);
}
cout << mindifference << endl;
}
int main()
{
vector<ll> arr = { 3, 8, 13, 30, 50 };
int n = sizeof (arr) / sizeof (arr[0]);
minDiff(arr, n);
return 0;
}
|
Java
import java.util.*;
class GFG{
public static void minDiff( long [] a, int n)
{
for ( int i = 0 ; i < n; i++)
{
if (a[i] % 2 == 1 )
a[i] *= 2 ;
}
Arrays.sort(a);
long mindifference = a[ 1 ] - a[ 0 ];
for ( int i = 1 ; i < a.length; i++)
{
mindifference = Math.min(mindifference,
a[i] - a[i - 1 ]);
}
System.out.println(mindifference);
}
public static void main(String []args)
{
long [] arr = { 3 , 8 , 13 , 30 , 50 };
int n = arr.length;
minDiff(arr, n);
}
}
|
Python3
def minDiff(a,n):
for i in range (n):
if (a[i] % 2 = = 1 ):
a.append(a[i] * 2 )
a = sorted (a)
mindifference = a[ 1 ] - a[ 0 ]
for i in range ( 1 , len (a)):
mindifference = min (mindifference,
a[i] - a[i - 1 ])
print (mindifference)
if __name__ = = '__main__' :
arr = [ 3 , 8 , 13 , 30 , 50 ]
n = len (arr)
minDiff(arr, n)
|
C#
using System;
class GFG{
public static void minDiff( long [] a, int n)
{
for ( int i = 0; i < n; i++)
{
if (a[i] % 2 == 1)
a[i] *= 2;
}
Array.Sort(a);
long mindifference = a[1] - a[0];
for ( int i = 1; i < a.Length; i++)
{
mindifference = Math.Min(mindifference,
a[i] - a[i - 1]);
}
Console.Write(mindifference);
}
public static void Main()
{
long []arr = { 3, 8, 13, 30, 50 };
int n = arr.Length;
minDiff(arr, n);
}
}
|
Javascript
<script>
function minDiff(a, n)
{
for (let i = 0; i < n; i++)
{
if (a[i] % 2 == 1)
a[i] *= 2;
}
a.sort((a, b) => a - b);
let mindifference = a[1] - a[0];
for (let i = 1; i < a.length; i++)
{
mindifference = Math.min(mindifference,
a[i] - a[i - 1]);
}
document.write(mindifference);
}
let arr = [ 3, 8, 13, 30, 50 ];
let n = arr.length;
minDiff(arr, n);
</script>
|
Time complexity: O(nlogn)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...