如何获取数组中所有子集的最大距离

时间:2015-12-11 03:36:51

标签: java algorithm performance subset distance

我有一个面试问题如下:

假设我们在这一行中有一条线和M点。如果我们将具有N(N <= M)个点的点子集的距离定义为每对点之间的距离的最小距离,则编写算法以找到所有子集的最大距离,每个子集的距离有N分......

我的意思是,如果我们有一个数组{1,2,10},并且N = 2,那么最大距离的子集应该是{1,10}。我的第一个想法是获得子集的所有组合并计算每个组合的距离,但是访谈者并不喜欢它,因为它需要花费太多时间。有没有人有时间有效的想法?

2 个答案:

答案 0 :(得分:0)

您需要对数组进行排序,找到第一个元素(最小),M将始终是最后一个元素(最大),因此子集将始终是{最小,最大}。

答案 1 :(得分:0)

将事物排成一行往往是一个动态编程将起作用的提示。

从左到右工作。在线路中的每个点处,对于k = 1..N,在迄今为止看到的具有最大最小距离的那些点中的大小为k的点集合。您可以根据已经为左侧的点制定的答案计算出该行中某一点的答案。要找到k点的答案,请考虑其左侧的每个点并找到min(该点处k-1点的最小距离,从当前点到该点的距离)。然后取最大值这些可能的值。