【问题标题】:How to get the maximum distance of all subsets in an array如何获得数组中所有子集的最大距离
【发布时间】:2015-12-11 03:36:51
【问题描述】:

我有一个面试问题如下:

假设我们有一条线,这条线上有 M 个点。如果我们将具有 N (N

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

【问题讨论】:

标签: java algorithm performance subset distance


【解决方案1】:

您需要对数组进行排序,找到第一个元素(最小),M 永远是最后一个元素(最大),所以子集永远是 {smallest,Largest}。

【讨论】:

  • 这仅适用于 N = 1 时的边缘情况。考虑 N = 2 的示例,但使用输入 {1, 10, 2} 代替。
  • 考虑 n 也是一个输入,你的方法只在 N=2 时有效
【解决方案2】:

将事物排列成一条线通常是动态编程可行的提示。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2018-02-12
    • 2010-11-29
    • 2012-11-25
    相关资源
    最近更新 更多