一个很有意思的问题,欢迎大家讨论

Alex_GMY 2017-11-23 03:10:46
在一个排好序的数组中,如果要在O(n)复杂度内查找和为定值的二元组数目则很好办,可以有很多方法。

那如果是要查找和在某一个范围内的二元组数目,并且在O(n)的时间内完成,又应该如何做呢?

欢迎大家讨论

比如 数组 a={1,2,3,4},范围是4到6

则有 a[0] + a[3] = 1 + 4 = 5
a[1] + a[2] = 2 + 3 = 5
a[1] + a[3] = 2 + 4 = 6

三种情况
...全文
147 10 点赞 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
das白 2017-11-25
不知道 求大神解答
  • 打赏
  • 举报
回复
l357630798 2017-11-25
引用 4 楼 xsklld 的回复:
不存在的。 比如范围非常大,包括所有二元组,光是输出就要O(n^2)。
+1
  • 打赏
  • 举报
回复
Alex_GMY 2017-11-25
引用 5 楼 xg436 的回复:
怎么 在一个排好序的数组中,如果要在O(n)复杂度内查找和为定值的二元组数目
不是定值,而是和在某一个范围之内
  • 打赏
  • 举报
回复
Alex_GMY 2017-11-25
引用 4 楼 xsklld 的回复:
不存在的。 比如范围非常大,包括所有二元组,光是输出就要O(n^2)。
是这样,输出满足条件的二元组的数目
  • 打赏
  • 举报
回复
xskxzr 2017-11-25
比如范围是a到b,先求出范围在0~b的个数,再求出范围在0~a-1的个数,相减即可。 而要求出范围在0~b的个数,可以用以下算法: 从a[n-1]开始往前搜,直到a[1]+a[k1]<=b。 从a[k1]开始往前搜(因为对于a[k1]之后的a[k],必有a[2]+a[k]>=a[1]+a[k]>b),直到a[2]+a[k2]<=b。 ... 范围在0~b的二元组的个数即为(k1-1)+(k2-2)+,,, 时间复杂度是O(n)。
  • 打赏
  • 举报
回复
xg436 2017-11-24
怎么 在一个排好序的数组中,如果要在O(n)复杂度内查找和为定值的二元组数目
  • 打赏
  • 举报
回复
xskxzr 2017-11-24
不存在的。 比如范围非常大,包括所有二元组,光是输出就要O(n^2)。
  • 打赏
  • 举报
回复
CT8100 2017-11-23
对哦-这样了假设范围为a-b 由大到小找小于b零界点 又小到大找大于a零界点 找的数组区间……我就这么想想具体时间复杂度好像不对
  • 打赏
  • 举报
回复
Alex_GMY 2017-11-23
引用 1 楼 iloveyou418 的回复:
就是在一个排号序号的数组中容易元素和满足对应的范围需求? 直接折中查找呢?依次折中,因为数据有大小顺序,对半可以快速定位到 所需要合适的数据范围。
但是这样的时间复杂度为O(nlog(n)),似乎不能满足要求
  • 打赏
  • 举报
回复
CT8100 2017-11-23
就是在一个排号序号的数组中容易元素和满足对应的范围需求? 直接折中查找呢?依次折中,因为数据有大小顺序,对半可以快速定位到 所需要合适的数据范围。
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2017-11-23 03:10
社区公告
暂无公告