【问题标题】:Find pair/triplets whose sum is least away from the given value查找总和与给定值相差最小的对/三元组
【发布时间】:2019-04-25 04:47:37
【问题描述】:

这个问题有两种变体。

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

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

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

【问题讨论】:

    标签: arrays algorithm data-structures time-complexity


    【解决方案1】:

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

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

    【讨论】:

    • 这就是我说上限算法的原因。 ubx = upper_bound(arr, x) 返回x 可以在不破坏顺序的情况下插入排序数组的最高位置。因此我们可以查看ubx - 1 是否具有精确值V-x。如果不是,则arr[ubx] 的值将大于V-x,但与V-x 的差异最小。
    猜你喜欢
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多