元素中最大距离的算法

Posted

技术标签:

【中文标题】元素中最大距离的算法【英文标题】:Algorithm for max distance in elements 【发布时间】:2016-09-17 08:25:02 【问题描述】:

我找到了一种解决方案,您可以在数组中找到最大和最小元素,这可以通过一个循环完成,并且只需要运行 n 次,然后减去它们以找到最大距离。 我的解决方案对吗?? 还有比这更好的解决方案吗?

【问题讨论】:

是的,您的解决方案很棒,但它针对的是一个完全不同的问题:您正在寻找最大差异,而他们正在寻找最小差异。 当您不发布(伪)代码时,任何人应该如何评价您的改进? 元素排序了吗? 一种简单的方法,1-使用快速排序对元素进行排序,2-最小距离为 A[1] - A[0] 但确保元素至少为2 个元素 【参考方案1】:

最大距离

对于最大距离,您的解决方案是正确的。没有更好的解决方案,因为您必须遍历数组中的所有元素。时间复杂度为O(n)

伪代码:

MaxDistance(A)
    min = max = A[0]
    for i=1 to n-1
        if A[i] < min
            min = A[i]
        if A[i] > max
            max = A[i]
    return (max-min)

最小距离

您问题中的伪代码用于查找数组中任何对之间的 最小 距离。更有效的解决方案是:

    按升序对数组A 进行排序。 O(nlogn) 遍历排序后的数组并比较所有相邻对,同时跟踪最小距离。 O(n)

伪代码:

MinDistance(A)
    sort(A)
    min_dist = infinity
    for i=1 to n-1
        dist = A[i]-A[i-1]
        if (min_dist > dist)
            min_dist = dist
    return min_dist

总时间复杂度:O(nlogn)

【讨论】:

以上是关于元素中最大距离的算法的主要内容,如果未能解决你的问题,请参考以下文章

51nod 1272 最大距离

最大最小距离算法

算法题之求二叉树的最大距离

算法将点放入具有最大最小距离的正方形

算法:点与点之间欧式距离最小

查询区间内距离标尺最近且不大于最大值的元素