的范围内,找到三胞胎在一个阵列总和 [英] Finding Triplets in a array with sum within a range

查看:89
本文介绍了的范围内,找到三胞胎在一个阵列总和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能重复:
  元组的

Possible Duplicate:
Number of tuples

由于N个数 A [1..1] 和2等整数L和H,我们要算的元组(我数, J,K),使得 L< = A [1] + A [J] + A [K]< = H 。 能比更好地这样做为O(n ^ 3)? 任何建议/算法?

Given N numbers a[1..N] and 2 other integers L and H, we have to count number of tuples (i,j,k) such that L <= a[i] + a[j] + a[k] <= H. Can this be done in better than O(n^3)? Any suggestions/ algorithms?

推荐答案

第一排序[I]增加订单。

first sort a[i] to increasing order.

枚举[I]和[J],这样你就可以使用二进制搜索以找到多少一[K]满足L - (A [I] + A [J])LT = A [K]&LT; = H - (A [I] + A [J]。)

enumerate a[i] and a[j], so you can use binary search to find how many a[k] satisfies L - (a[i] + a[j]) <= a[k] <= H - (a[i] + a[j]).

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

这篇关于的范围内,找到三胞胎在一个阵列总和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆