gpt4 book ai didi

java - 查找范围内元素数量的最快方法

转载 作者:太空狗 更新时间:2023-10-29 20:24:06 24 4
gpt4 key购买 nike

给定一个包含n 个元素 的数组,如何找到大于等于 给定值的元素数 ( x)O(log n)更好 复杂度的给定范围索引i 到索引j 中?

我的实现是这样的,但它是O(n)

for(a=i;a<=j;a++)
if(p[a]>=x) // p[] is array containing n elements
count++;

最佳答案

如果允许对数组进行预处理,那么使用 O(n log n) 预处理时间,我们可以在 中回答任何 [i,j] 查询>O(log n) 时间。

两个想法:

1) 观察到能够回答[0,i][0,j] 查询就足够了。

2) 使用持久*平衡顺序统计二叉树,它维护着树的n个版本,版本i由版本i-1通过添加a[i]形成。要回答 query([0,i], x),您需要查询版本 i 树的元素数量 > x(基本上是排名信息)。订单统计树可以让您做到这一点。

*:持久数据结构是不可变数据结构的优雅函数式编程概念,并具有高效的构造算法。

关于java - 查找范围内元素数量的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29981720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com