给定大小为n的未排序数组arr [] ,任务是查找给定数组中任何对之间的最小差异。
Input: arr[] = {1, 2, 3, 4}
Output: 1
The possible absolute differences are:
{1, 2, 3, 1, 2, 1}
Input: arr[] = {10, 2, 5, 4}
Output: 1
方法:
- 遍历数组并创建一个哈希数组以存储数组元素的频率。
- 现在,遍历哈希数组并计算两个最近元素之间的距离。
- 计算频率是为了检查某个元素的频率是否大于1,这意味着绝对距离将为0,即| arr [i] – arr [i] |。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
#define MAX 100001
// Function to return the minimum
// absolute difference between any
// two elements of the array
int getMinDiff(int arr[], int n)
{
// To store the frequency of each element
int freq[MAX] = { 0 };
for (int i = 0; i < n; i++) {
// Update the frequency of current element
freq[arr[i]]++;
// If current element appears more than once
// then the minimum absolute difference
// will be 0 i.e. |arr[i] - arr[i]|
if (freq[arr[i]] > 1)
return 0;
}
int mn = INT_MAX;
// Checking the distance between the nearest
// two elements in the frequency array
for (int i = 0; i < MAX; i++) {
if (freq[i] > 0) {
i++;
int cnt = 1;
while ((freq[i] == 0) && (i != MAX - 1)) {
cnt++;
i++;
}
mn = min(cnt, mn);
i--;
}
}
// Return the minimum absolute difference
return mn;
}
// Driver code
int main()
{
int arr[] = { 1, 2, 3, 4 };
int n = sizeof(arr) / sizeof(int);
cout << getMinDiff(arr, n);
return 0;
}
Java
// Java implementation of the approach
import java.util.*;
class GFG
{
private static final int MAX = 100001;
// Function to return the minimum
// absolute difference between any
// two elements of the array
static int getMinDiff(int arr[], int n)
{
// To store the frequency of each element
int[] freq = new int[MAX];
for(int i = 0; i < n; i++)
{
freq[i] = 0;
}
for (int i = 0; i < n; i++)
{
// Update the frequency of current element
freq[arr[i]]++;
// If current element appears more than once
// then the minimum absolute difference
// will be 0 i.e. |arr[i] - arr[i]|
if (freq[arr[i]] > 1)
return 0;
}
int mn = Integer.MAX_VALUE;
// Checking the distance between the nearest
// two elements in the frequency array
for (int i = 0; i < MAX; i++)
{
if (freq[i] > 0)
{
i++;
int cnt = 1;
while ((freq[i] == 0) && (i != MAX - 1))
{
cnt++;
i++;
}
mn = Math.min(cnt, mn);
i--;
}
}
// Return the minimum absolute difference
return mn;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 1, 2, 3, 4 };
int n = arr.length;
System.out.println(getMinDiff(arr, n));
}
}
// This code is contributed by nidhi16bcs2007
Python3
# Python3 implementation of the approach
MAX = 100001
# Function to return the minimum
# absolute difference between any
# two elements of the array
def getMinDiff(arr, n):
# To store the frequency of each element
freq = [0 for i in range(MAX)]
for i in range(n):
# Update the frequency of current element
freq[arr[i]] += 1
# If current element appears more than once
# then the minimum absolute difference
# will be 0 i.e. |arr[i] - arr[i]|
if (freq[arr[i]] > 1):
return 0
mn = 10**9
# Checking the distance between the nearest
# two elements in the frequency array
for i in range(MAX):
if (freq[i] > 0):
i += 1
cnt = 1
while ((freq[i] == 0) and (i != MAX - 1)):
cnt += 1
i += 1
mn = min(cnt, mn)
i -= 1
# Return the minimum absolute difference
return mn
# Driver code
arr = [ 1, 2, 3, 4]
n = len(arr)
print(getMinDiff(arr, n))
# This code is contributed by Mohit Kumar
C#
// C# implementation of the approach
using System;
class GFG
{
private static int MAX = 100001;
// Function to return the minimum
// absolute difference between any
// two elements of the array
static int getMinDiff(int []arr, int n)
{
// To store the frequency of each element
int[] freq = new int[MAX];
for(int i = 0; i < n; i++)
{
freq[i] = 0;
}
for (int i = 0; i < n; i++)
{
// Update the frequency of current element
freq[arr[i]]++;
// If current element appears more than once
// then the minimum absolute difference
// will be 0 i.e. |arr[i] - arr[i]|
if (freq[arr[i]] > 1)
return 0;
}
int mn = int.MaxValue;
// Checking the distance between the nearest
// two elements in the frequency array
for (int i = 0; i < MAX; i++)
{
if (freq[i] > 0)
{
i++;
int cnt = 1;
while ((freq[i] == 0) && (i != MAX - 1))
{
cnt++;
i++;
}
mn = Math.Min(cnt, mn);
i--;
}
}
// Return the minimum absolute difference
return mn;
}
// Driver code
public static void Main()
{
int []arr = { 1, 2, 3, 4 };
int n = arr.Length;
Console.WriteLine(getMinDiff(arr, n));
}
}
// This code is contributed by AnkitRai01
Python3
# Python3 implementation of the approach
import itertools
arr = [1,2,3,4]
diff_list = []
# Get the combinations of numbers
for n1, n2 in list(itertools.combinations(arr, 2)):
# Find the absolute difference
diff_list.append(abs(n1-n2))
print(min(diff_list))
# This code is contributed by mailprakashindia
输出:
1
输出:
1
替代性的更短实施:
Python3
# Python3 implementation of the approach
import itertools
arr = [1,2,3,4]
diff_list = []
# Get the combinations of numbers
for n1, n2 in list(itertools.combinations(arr, 2)):
# Find the absolute difference
diff_list.append(abs(n1-n2))
print(min(diff_list))
# This code is contributed by mailprakashindia
输出:
1
如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。