首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定一个排序数组和一个正整数k,求出1 <= i <= k的区间(100(i-1)/k,100(i)/k]内的整数个数

给定一个排序数组和一个正整数k,求出1 <= i <= k的区间(100(i-1)/k,100(i)/k]内的整数个数
EN

Stack Overflow用户
提问于 2020-09-25 22:55:31
回答 1查看 369关注 0票数 2

给定排序数组A1..n和正整数k,对1 <= i <= k的区间(100(i-1)/k,100(i)/k]中的整数个数进行计数,并将其存储在另一个数组G1..k中。

假设数组G已经被创建(不是算法中的输入),并且G中的元素被初始化为0。

还有一个辅助函数Increase(i,count),用于找出Ai对应的间隔(G),并将G的值增加count;

例如,排序数组1,11,25,34,46,62,78,90,99,k=4

因此结果应该是G1 = 3,G2 = 2,G3 = 1,G4 =3,其中G1是一个间隔(0,25] G2 -> (25,50] G3 -> (50,75] G4 -> (75,100))

有没有什么分而治之的算法来解决这个问题?而不是线性地解决它?

更高级:另外,如果我们不能直接访问数组A中的元素,并且如果Ax和Ay在相同的间隔内,有一个函数Compare(x,y)返回true。如何解决?我是否可以尝试使每个组呼叫的时间增加至多log次,并且有k个组,因此运行时间为O(k log )?

我在这一点上的观察:如果Ai和Ay在i< y的同一区间内,则i

EN

回答 1

Stack Overflow用户

发布于 2020-09-25 23:26:24

最简单的次线性方法(假设k << n)是进行(k+1)二进制搜索,每个边界值一个,产生一个近似(k lg n)-comparison算法。

通过智能地将探针组合在一起,可以将其降低到大约(k (1 + lg (n/k)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64066565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档