【问题标题】:Finding Triplets in a array with sum within a range [duplicate]在数组中查找总和在一个范围内的三元组[重复]
【发布时间】:2012-11-04 05:53:46
【问题描述】:

可能重复:
Number of tuples

给定 N 个数字 a[1..N] 和 2 个其他整数 L 和 H,我们必须计算元组的数量 (i,j,k) 使得 L <= a[i] + a[j] + a[k] <= H。 这可以比O(n^3) 做得更好吗? 有什么建议/算法吗?

【问题讨论】:

  • 否,数字未排序。
  • 输出大小为 O(n^3),所以要更快地做起来有点困难......
  • @n.m.该问题只要求计数,因此输出大小为 O(1)。
  • @john Ah 错过了。那应该会容易一些。

标签: c++ arrays algorithm


【解决方案1】:

首先将 a[i] 排序为升序。

枚举a[i]和a[j],所以可以用binary search求出有多少a[k]满足L - (a[i] + a[j])

整个算法成本O(n^2*log(n))

【讨论】:

    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多