📌  相关文章
📜  找到任意两个元素之间的最小差|套装2

📅  最后修改于: 2021-06-25 23:39:04             🧑  作者: Mango

给定大小为n的未排序数组arr [] ,任务是查找给定数组中任何对之间的最小差异。

方法:

  1. 遍历数组并创建一个哈希数组以存储数组元素的频率。
  2. 现在,遍历哈希数组并计算两个最近元素之间的距离。
  3. 计算频率是为了检查某个元素的频率是否大于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现场课程美国》。