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

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

三种情况
...全文
169 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
大米粥哥哥 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
  • 打赏
  • 举报
回复
就是在一个排号序号的数组中容易元素和满足对应的范围需求? 直接折中查找呢?依次折中,因为数据有大小顺序,对半可以快速定位到 所需要合适的数据范围。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧