元素最大距离算法

时间:2016-09-17 08:25:02

标签: algorithm

enter image description here

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

1 个答案:

答案 0 :(得分:2)

最大距离

对于最大距离,您的解决方案是正确的。没有更好的解决方案,因为必须遍历数组中的所有元素。时间复杂度为SELECT u.user_id, u.fried_id FROM (SELECT user_id, friend_id FROM friendship WHERE user_id < friend_id AND status = 'done') u JOIN (SELECT user_id, friend_id FROM friendship WHERE user_id > friend_id AND status = 'done') f ON u.user_id = f.friend_id AND u.friend_id = f.user_id

伪码:

O(n)

最小距离

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

  1. 按升序对数组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
  2. 对已排序的数组进行迭代,并比较所有相邻对,同时跟踪最小距离。 O(nlogn)
  3. 伪码:

    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