我有三个整数数组A,B,C。
我想找到最接近的a,b,c这样
a< b< c其中a属于A,b属于B,c属于C.
当我说最接近时,我的意思是(b-a)+(c-b)=(c-a)是最小的。
自己提出这个问题。我只能想到O(N ^ 3)
的蛮力答案 0 :(得分:1)
正如TravisJ提到的那样,您正在优化的值是(b-a) + (c-b) = c - a
因此,您只需要最小化两个元素之间的差异 - 一个来自第一个集合,一个来自第三个集合。我能想到的一种可能的方法是 - 对C
中的元素进行排序,然后迭代A
中的所有元素。对于来自a
的每个A
,您可以在已排序的C
中进行二分查找,以找到最接近给定c
的元素a
。优化以这种方式获得的所有值c-a
。此解决方案将具有复杂性O(n * log(n))
。
编辑:(再次按照TravisJ的建议):您需要确保来自b
的{{1}} B
。为此,您还需要对a < b < c
进行排序。现在,对于每个B
,您在a
中执行二进制搜索,以查找大于B
的最小b
,然后在a
中找到另一个二进制文件以查找最小c
{1}}大于c
。
答案 1 :(得分:0)
在C的每个元素c上循环。在B上使用二进制搜索以找到最大元素b,使得b <1。 C。在A上使用二进制搜索来找到最大元素a,使得&lt;湾(如果a或b不存在,请转到下一个c。)计算c-a;如果它比之前看到的任何c-a少,那么将其设置为迄今为止最好看的。最后回归到目前为止最好的,或者如果你找不到合适的三重奏那么“不可能”。这需要O(n log n)。