首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找比数组中给定的数字更大的数字

查找比数组中给定的数字更大的数字
EN

Stack Overflow用户
提问于 2016-09-30 19:26:34
回答 1查看 84关注 0票数 0

有一个未排序的数字序列:a1,a2,...,an

还有,我们有一个号码,我,所以我们有艾

我们想找出j<iaj>ai这样的数字:

代码语言:javascript
复制
3,4,9,1,8,10,2,2,6,1
if i=8 then j=6
if i=7, j=6 again
if i=10 then j=9
if i=1 then j=NIL (Not In List)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-30 20:20:07

可以使用段树在O(n)预处理和每个查询中执行O(log )。

在每个查询中使用O(log^2,n)进行这一操作非常简单。首先,构建一个分段树,它支持在O(log )上的一个段上获得最大值。第二,对每个查询执行二进制搜索。

我表示max(a_i, ..., a_j) as max(i, j)。假设查询索引是i。如果是max(i+1, n) <= a_i,那么显然没有这样的元素。否则,您必须找到一个最小的j,以便max(i+1, j) > a_i,ant,这是通过在j上进行二进制搜索来完成的。

为了进一步改进,您必须深入到段树结构中。我会给你一个基本的想法。假设您必须在数组中找到大于x的第一个元素。最初,您位于段树的根上。如果左子树的最大值是> x,那么您将转到左边的子树,其他的则转到右边。可以很容易地显示,您完成的叶对应于数组的最左边元素,即> x

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

https://stackoverflow.com/questions/39798759

复制
相关文章

相似问题

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