首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >开始元素大于结束元素div 2的最长递增连续序列

开始元素大于结束元素div 2的最长递增连续序列
EN

Stack Overflow用户
提问于 2013-05-08 16:40:52
回答 1查看 72关注 0票数 3

我有一个排序的数组,我想高效地找到从头到尾最长的相邻子序列,比如array[begin]>=array[end] div 2

显而易见的是(O^(n^2) ),但是有没有更好的呢?

EN

Stack Overflow用户

发布于 2013-05-08 17:16:00

它可以在线性时间内完成。首先,让我们从二次型开始:

如果未到达数组的末尾,则从第一个位置开始,在索引i+1

  • As的位置增加索引i.

  • increment j,元素a[j]/2 <= a[i],j
    1. 记录索引i.
    2. increment索引i的“分数”并返回步骤2。
    3. 覆盖所有索引后,取分数最大的索引。

    <

    1. >G218

关键是要认识到,如果您在第3步中对一对(i, j)失败,那么这意味着:

代码语言:javascript
复制
for every i < k < j, a[k] <= a[i]/2
a[j] > a[i]/2

因此,在第5步,转到任何小于jk将导致较小的分数,因为a[j] > a[i]/2 > a[k]/2。因此,下一个要开始的索引是j

到目前为止,我们在计算任何分数时,最多只能访问一次索引。这减少了从O(n^2)O(n)的这一步。那么,取得分最高的指标显然是O(n)

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

https://stackoverflow.com/questions/16436174

复制
相关文章

相似问题

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