arrays - 如何组合三个数组的元素以获得想要的结果

标签 arrays algorithm

我在面试中被问到这个问题:

给定三个大小不等的数组和一个特定的数字,我必须从这三个数组中的每一个中选择一个数字,然后通过将 array1 和 array2 中的数字相除并将其与 array2 和 array3 中的数字相乘,找到是否可以获得特定号码?

For example: If I have three arrays: 
Array1: 4
Array2: 3 6
Array3: 2 3 8

而且我必须找到是否可以获得数字(1/4)?是的,可能是因为如果我从第一个数组中选择 4,从第二个数组中选择 6,然后从第二个数组中选择 3,从第三个数组中选择 8,我可以有,

(4/6)*(3/8) which makes it as 1/4. 

如何继续这个问题?为此,我想不出任何可靠的办法。谢谢!

最佳答案

M 成为您想要的数字。

您可以从 (array2,array3) 遍历所有对 (i,j)(其中有 O(n2*n3)),并存储值 array2[i ]/array3[j] 在一个集合中。

然后,遍历array1,array2中的所有对k,l(其中有O(n1*n2)),并检查是否有值在集合 x 中满足 array1[k]/array2[l] * x = M
这可以通过简单地检查表中是否存在值 x = M*array2[l]/array1[k] 来完成。

假设集合的平衡树实现,这将花费 O(log(n2*n3) * (n1*n2 + n2*n3)) 时间。

通过选择存储最小化乘积总和的数组,可以对不等大小的数组进行一些改进:x1*x2 + x3*x4(其中 x1,x2,x3,x4)是数组的大小,array2“得到”这个等式中的两个变量),所以你基本上可以有以下“存储”组合:

  • array2/array3(如上例所示)
  • array1/array2(并检查 x=M*array3/array2)
  • array2/array2(并检查 x=M*array3/array1)
  • array1/array3(并检查 x=M*array2/array2)
  • array1*array2(并检查 x=M*array3*array2
  • 1/(array2*array3)(并检查 x=M/(array2*array1)

关于arrays - 如何组合三个数组的元素以获得想要的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32676200/

相关文章:

ios - Swift:将 oldArray[][] 复制到 newArray[][] 会导致错误(类型 'Any' 没有下标成员)

algorithm - 为什么最常见的散列 (SHA1) 密码前缀是 "00000"?

c++ - strcpy 不复制分配的字符数组

c - 从文件中读取 int 和 char 数组,然后调整数组大小

java - 游戏中的按钮未显示正确的消息

arrays - 我可以在亚线性时间内找到未排序数组中的最大/最小值吗?

php - 创建横幅交换算法以旋转广告

python - 如何计算图中定义的 N 个允许移动中路径权重的总和,但目标节点未使用 Python 固定

algorithm - 如何找到稀疏向量的最近邻

c++ - 使用 std::copy 将一个结构的数组转换为另一个结构的 Vector