arrays - 查找总和与给定值的距离最小的对/三元组

标签 arrays algorithm data-structures time-complexity

这个问题有 2 个变体。

  1. 给定 2 个整数数组,从每个数组中选择单个元素,使它们的总和与给定整数值 V 的距离(数值上)最小。总和可以大于 V。

  2. 给定 3 个整数数组,从每个数组中选择单个元素,使它们的总和与给定整数值 V 的距离(数值上)最小。总和可以大于 V。

我知道分别有一个天真的 O(n^2) 和 O(n^3) 解决方案,我想问一下是否有任何优化运行时间的方法。

最佳答案

对于第一种情况,您可以对 O(nlogn) 中的两个数组进行排序,然后对于第一个数组中的每个元素 x,找到 V-x 在第二个数组中使用二进制搜索/上限算法。
它的总复杂度仍然是 O(nlogn),小于 O(n*n)

对于第二种情况,您可以应用具有O(n*n*log(n)) 复杂度的类似算法。

关于arrays - 查找总和与给定值的距离最小的对/三元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55841970/

相关文章:

javascript - 使用Ramda(或其他功能库)使用indexOf过滤大数组对象?

javascript - 指向 JSON blob 中的不同值以放入数组

algorithm - 为什么函数的复杂度是 f(n) = n^d, O(b^n),其中 b>1 且 d 为正数?

java - 使用 Linkedhashmap 测试算法

algorithm - O(n^2) 从哪里来 O(n^2 * log n)?

algorithm - 将不平衡树转换为生成树

c++ - 如何将 std::array 转换为一个点?

c++ - 为什么我对数组中的图 block 进行评分的函数不起作用?

algorithm - 找出((A相交B)并集C)相交D)的基数的有效(恒定空间或次线性空间)方法?

arrays - 表达式对于编译器来说太复杂 : an array with 14 attributes