📜  门| GATE-CS-2014-(Set-3) |问题 15(1)

📅  最后修改于: 2023-12-03 14:58:29.527000             🧑  作者: Mango

GATE-CS-2014-(Set-3) | Problem 15

题目描述

给定一个整数数组,编写一个函数以计算不超过阵列中任何两个数字之间的差的最小值。

示例

输入:arr [] = {1, 5, 3, 19, 18, 25}; 输出:2 解释:最小差为2,即18-20,其中1和3之间的差为2,其余元素之间的差都大于2。

解答

这道题的关键是要找到数组中的最小差值,可以通过将数组排序然后计算相邻元素之间的差值来完成。

以下是可以实现此功能的C ++代码:

int findMinDiff(int arr[], int n) {
    sort(arr, arr+n);
    int min_diff = INT_MAX;
    for (int i = 1; i < n; i++){
        if (arr[i] - arr[i-1] < min_diff){
            min_diff = arr[i] - arr[i-1];
        }
    }
    return min_diff; 
}

该函数将数组排序,然后使用循环遍历相邻元素并计算它们之间的差。如果找到差小于当前最小差的两个元素,则更新最小差值。

复杂度分析

排序需要O(n log n)时间,因为算法遍历了一次数组,因此,该算法的时间复杂性为O(n log n)。

总结

本问题的解决方案可以很容易地通过将数组排序并查找相邻元素之间的差值而获得。 这个问题的时间复杂性是O(n log n),因为排序数组需要这么长时间。