在未排序的列表中查找序列

2024-02-18

So, I am given an unsorted list A = (a1, a2, ..., an) with n distinct elements. My goal here is to find the middle index i (1 <= i <= n) of a sequence where ai-1 < ai and ai > ai+1. The algorithm should run in O(log(n)) worst case. It is also given that a0 = an+1 = -inf.

所以基本上我需要找到一个被比自身更小的数字包围的索引,例如{1,5,3},其中1和3小于5。

Example:

输入:A = {1,2,4,5,3,7,6}

输出:4(因为序列为 {4, 5, 3})

如果最坏情况是 O(n),那么这个算法将非常简单,其中一个简单的 for 循环可以检查该序列,但我很难接受它需要运行最坏情况 O(log (n))。


首先,请注意,如果您有三个元素a_i, a_j, a_k with i<j<k and a_j > a_i and a_j > a_k,那么之间必定存在一个峰值i and k。证明很简单:介于两者之间的最大值a_i and a_k必须是峰值,并且不能是任一端点。

您可以使用此观察结果在对数时间内解决问题。

我们将保留三个值:x, y, z这样x<y<z and a_y > a_x and a_y > a_z。一开始,初始化x, y, z to 0, (n+1)/2, n+1。 (条件成立,因为a_0 = a_(n+1) = -inf).

现在考虑三元组(x, (x+y)/2, y), ((x+y)/2, y, (y+z)/2), (y, (y+z)/2, z))。这些三元组之一可以作为我们的下一个(x, y, z)。 (证明很简单,但我把它留给你)。

这个过程将每次搜索的范围减半,当我们缩小到一个很小的间隔时(比如z-x < 5),此时峰值最多为 1 或 2 个元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在未排序的列表中查找序列 的相关文章

  • 固定大小集以包含给定集的最大数量

    我有大约 1000 组尺寸 1 4 1 3 3 5 6 4 5 6 7 5 25 42 67 100 是否有可能找到包含最大数量的给定集合的大小为 20 的集合 检查每一个100 80 20 集 效率低下 我不太确定这是 NP 完全的 考虑
  • 我需要一个支持高效随机访问和 O(k) 插入和删除的容器

    我再次尝试问同样的问题question https stackoverflow com questions 3808708 delete parts of a dynamic array and grow other 但我最终提出了一个不同
  • 点集子集的最小周长凸包

    给定平面上的 n 个点 没有 3 个共线 给定数字 k 找到 k 个点的子集 使得 k 个点的凸包在 k 个点的子集的任何凸包中具有最小周长 我可以想到一个简单的方法 运行时间为 O n k k log k 找到大小为 k 的每个子集的凸包
  • 有人可以解释以下异或属性

    我的一个论坛提到给定的数组n数字 arr 0 n 1 以下条件成立 is the xor运算符 f l r f 0 r f 0 l 1 where f l r arr l arr l 1 arr r 我检查了上面的数组数量和不同的值l an
  • 由周期表元素形成的最大单词的算法

    我想为以下问题场景编写一个算法 根据元素周期表元素的名称 找到可以组成的最大单词 符号如Na Ne等应被视为单个元素 这是在一家知名公司的求职面试中被问到的 有人可以帮我解决这个问题吗 我认为更好的方法是检查字典中的每个单词 看看是否可以从
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • 数组中连续元素的最大乘积

    我在现场面试的时候被问到了这个算法问题 由于没有要求我签署保密协议 我将其发布在这里寻求答案 给定一个数组REAL不包含 0 的数字 找到产生最大乘积的连续元素 该算法应在线性时间内运行 我考虑过以下方法 使用两个数组 第一个是利用DP思想
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • 分而治之策略来确定列表中是否有超过 1/3 的相同元素

    我正在使用分治算法来确定列表中是否有超过 1 3 的元素相同 例如 1 2 3 4 不 所有元素都是唯一的 1 1 2 4 5 是的 其中 2 个是相同的 没有排序 是否有分而治之的策略 我陷入了如何划分的困境 def is valid i
  • C 埃及分数

    古埃及人仅使用以下形式的分数1 n因此任何其他分数都必须表示为这些单位分数的总和 而且 所有单位分数都是不同的 在C或Java中使任何分数成为埃及分数 总和越少越好 的好方法是什么 可以使用什么算法 分支定界 a 例如 3 4 1 2 1
  • 使用并集查找(又名不相交集)检测图是否是二分图

    我正在 Spoj 上做一个问题 基本上可以简化为检测图是否是二分图 我正在尝试使用 dfs 为图表着色 但它太慢了 有人评论这个 没有 bfs 没有 dfs 没有二部图 简单的并查集就可以做到 确实速度很快 提示 1 偶数长度的环不会影响两
  • 计算两点之间的最短路线

    过去几周我一直在开发一款多人 HTML5 游戏 使用nodejs and websockets 我已经被这个问题困扰了一段时间 想象一下 我用数组实现了这个平铺地图 如下所示 1 or 棕色瓷砖 路上有障碍物 玩家无法通过 0 or 绿色瓷
  • 绘制多边形

    我正在使用 Google Maps API V3 根据路径绘制多边形 该路径是随机未排序坐标点 LatLng 的数组 这会产生以下形状 Polylines intersect Problem 由于多边形的形状取决于路径中点的顺序 因此如何对
  • 需要一种将网络块范围折叠为超集范围列表的算法

    我的数学不及格 我需要一种有效的方法将网络范围缩小为超集 例如如果我输入 IP 范围列表 1 1 1 1至2 2 2 5 1 1 1 2至2 2 2 4 10 5 5 5至155 5 5 5 10 5 5 6至10 5 5 7 我想返回以下
  • 如何从迭代器推导连续内存

    不知何故 本土stl copy VC Dinkumware 上的算法表明它可以使用memcpy 可以轻松复制的数据 一个凡人能做到这一点吗 假设每个元素都是普通可复制的 random access iterator 是否意味着连续内存 标准
  • Florian 的 Grisu2 算法如何工作?

    我遇到了一个关于将 double 转换为 ascii 的问题 经过搜索 我得到了 Florian 的论文 使用整数快速准确地打印浮点数 http www cs tufts edu nr cs257 archive florian loits
  • 每个术语出现的次数

    我得到了一个数组a n 2 where n can be 10 5最大时有n个科目和n个学生 全部编号为 1 2 n a i 0 and a i 1 1 lt i lt n 表示在第 i 个科目中 所有来自a i 0 to a i 1 通过
  • 二维滑动窗口最小值/最大值

    假设我们得到一个大小为 NxN 的像素整数矩阵和一个整数 k 窗口大小 我们需要使用滑动窗口找到矩阵中的所有局部最大值 或最小值 这意味着 如果某个像素与其周围窗口中的所有像素相比具有最小 最大 值 则应将其标记为最小 最大 有一种著名的滑
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li

随机推荐

  • 带有石英的自定义 UIBarButtonItem

    如何用石英绘制一个与 UIBarButtonItem 风格完全相同的按钮 按钮应该能够显示不同的颜色 我下载了Three20项目 但是这个项目非常复杂 你需要很多时间才能忽略整个框架 我只想绘制一个自定义 UIBarButtonItem 感
  • 为 azure blob 存储终结点配置自定义域名

    我正在关注有关如何为 Blob 存储端点配置自定义域的说明 https learn microsoft com en us azure storage blobs storage custom domain name register a
  • 电子邮件验证 MX 查找

    我被要求在网络应用程序上实现一些电子邮件地址验证 我相信我们都已经经历过一千次了 但是 这一次我被要求在域上进行 MX 查找 看看是否它接受电子邮件 有谁知道这样做有任何潜在的问题吗 mx 查找是确定域是否接受电子邮件的可靠方法吗 是否存在
  • 如何在我的本地仓库 Maven 中下载并安装 jar

    我正在尝试在 tomcat 下下载一个用于内部存储库的 jar 然后将其安装到我的本地 Maven 存储库 jar 文件可以在下面找到path http 10 11 250 14 strepo ext JSErrorCollector 0
  • 如何正确使用CSS媒体查询进行响应式设计

    我有媒体查询方面的问题 我想要我的主线div宽度为 960 像素 但如果屏幕小于 960 像素 我希望它是任何当前宽度的 80 我只从 960px 中得到 80 而不是从更小的所有东西中得到 80 例如 800px 的 80 700px 的
  • Opencv - 灰度模式与灰度颜色转换

    我正在 opencv 2 4 11 python 2 7 中工作 并正在处理灰色图像 在灰度模式下加载图像并将图像从 BGR 转换为灰度时 我发现了异常行为 以下是我的实验代码 import cv2 path some path to co
  • 为什么 android ImageSpan 会显示我的图片两次(当 setBounds 超过特定的魔法宽度时)?

    这是我将 ImageSpan 放入 EditText 中的代码 public void onActivityCreated Bundle savedInstanceState super onActivityCreated savedIns
  • Swift 2 Tapgesture 中无法识别的选择器

    我最近开始将我的应用程序更新到 Swift 2 0 但我遇到了一个问题 该问题在 SO 上有一百个不同的答案 但似乎都与我的问题无关 这在将应用程序更新到 Swift 2 0 之前有效 但我无法找到对点击手势识别器所做的任何更改 这是我收到
  • 无法将“string”隐式转换为“System.TypeCode”

    只是想知道是否有人知道如何修复这个错误 我也用过TypeCode 但仍然没有运气 谢谢 case typeof Nullable
  • c 获取整数的第n个字节

    我知道你可以通过使用获得第一个字节 int x number 1 lt lt 8 1 or int x number 0xFF 但我不知道如何获取整数的第 n 个字节 例如 1234 为 32 位整数 00000000 00000000 0
  • git-stitch-import:如何创建一个主分支?

    我正在尝试将多个 git 存储库合并到一个新存储库中 每个旧存储库作为新存储库中的子目录 git stitch repo 似乎是我想要的工具 但是 文档不太清楚 我能够遵循它 https metacpan org pod distribut
  • this()在Java中意味着什么[重复]

    这个问题在这里已经有答案了 什么是this 在Java中是什么意思 看起来只有放置时才有效 this 在类变量区中 有人对此有想法吗 Thanks 这意味着您正在从另一个构造函数调用默认构造函数 它必须是第一个语句 如果有 则不能使用 su
  • 如何在 Android 中制作 FM 收音机应用程序 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 这只是出于好奇 有什么办法可以让我们调频广播应用程序适用于 Android 设备 我知道这是可能的 因
  • 对象默认的stringify,相当于Java的toString?

    我刚刚看了 dart 的 3 教程 创建了评级组件 我想知道在字符串化对象时是否调用相同的方法 类似于Java的toString 例如 MyClass myObject new MyClass System out println myOb
  • 如何编写正确的静态方法 - 多线程安全

    因为我认为静态方法不应该像第一个片段那样编写 还是我错了 public static class ExtensionClass private static SomeClass object1 private static StringBu
  • 使用 msiexec 和 c# 安装 msi

    在静默模式下在 C 应用程序中安装 msi 的最佳方法是什么 我想使用 msiexec 安装 msi 文件 但我不知道如何执行此操作 问题是使用 msiexec 和 qn 时 您必须在 cmd exe 进程中运行它 以 以管理员身份 启动
  • laravel 中会话超时或过期后触发函数

    我有一个关于身份验证的问题 我的身份验证控制器中有以下功能 public function signout set logged in status to zero in database l Login where user id Ses
  • 一页上有多个谷歌地图

    在一页上显示多个实体 每个实体都有一个谷歌地图 这就是我处理仅显示一个实体的地图的方式 var map var geocoder document ready function google maps event addDomListene
  • 您何时以及为何使用 Java 的供应商和消费者接口?

    作为一名学习 Java 的非 Java 程序员 我正在阅读Supplier and Consumer目前的接口 我无法理解它们的用法和含义 您何时以及为何使用这些接口 有人可以给我一个简单的外行例子吗 我发现文档示例对于我的理解来说不够简洁
  • 在未排序的列表中查找序列

    So I am given an unsorted list A a1 a2 an with n distinct elements My goal here is to find the middle index i 1 lt i lt