Problem
Given an unsorted array, find the minimum difference between any pair in a given array and print the array.
Sample Input
[1, 2, 2, 1]
Sample Output
1 1
Approach
Sort array in ascending order. Initialize the difference as
INT_MAX
. Compare all adjacent pairs in a sorted array and keep track of the minimum difference and update the pair with minimum difference. This approach takes O(NlogN) time.
C++ Programming
#include <bits/stdc++.h>
using namespace std;
int f, s;
void solve(int arr[], int n)
{
sort(arr, arr+n);
int diff = INT_MAX;
for (int i=0; i<n-1; i++)
if (arr[i+1] - arr[i] < diff)
{
f = arr[i];
s = arr[i+1];
diff = arr[i+1] - arr[i];
}
}
int main()
{
int arr[] = {1, 2, 3, 4};
int n = sizeof(arr)/sizeof(arr[0]);
solve(arr, n);
cout<<f<<" "<<s;
}
Output
1 2
Python Programming
f=-1 s=-1 def solve(arr, n): arr = sorted(arr) diff = 10**9 for i in range(n-1): if arr[i+1] - arr[i] < diff: diff = arr[i+1] - arr[i] f=arr[i+1] s=arr[i] print(f, end=" ") print(s) arr = [1, 2, 3, 4] n = len(arr) solve(arr,n)
Output
2 1
Java Programming
import java.util.Arrays;
class Solution
{
static void solve(int[] arr, int n)
{
Arrays.sort(arr);
int diff = Integer.MAX_VALUE;
int f=-1,s=-1;
for (int i=0; i<n-1; i++)
if (arr[i+1] - arr[i] < diff){
diff = arr[i+1] - arr[i];
f=arr[i+1];
s=arr[i];
}
System.out.println(f);
System.out.println(s);
}
public static void main(String[] args)
{
int arr[] = new int[]{1, 2, 3};
solve(arr,3);
}
}
Output
2 1
People are also reading:
- Construct a tree from Inorder and Level order traversals
- Print all subarrays with 0 sum
- Rearrange an array in maximum minimum form
- Rod Cutting Problem
- Shuffle list in Python using random.shuffle() function
- Longest Consecutive Sequence in Linear time
- Count subarrays with given XOR
- Minimum Edit Distance
- Majority Element
- Rearrange an array such that arr[i] = i