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

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(使用前将#替换为@)

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

  • Numpy:具有特定条件的线性系统。无负解

    我正在使用 numpy 编写 Python 代码 在我的代码中 我使用 linalg solve 来求解 n 个变量中的 n 个方程的线性系统 当然 解决方案可以是积极的 也可以是消极的 我需要做的是始终有正解或至少等于 0 为此 我首先希
  • 基数首先排序最重要的还是最不重要的,哪个更快?

    我一直在研究基数排序实现 到目前为止粘贴在下面的代码 代码是用 Java 编写的 但在 C C 中应该也能正常工作 正如您从实现中看到的 我首先执行最高有效位 即整数的第 31 位 这似乎更快 因为一旦子组完成 就不再需要迭代 例如 打个比
  • 地图应用的聚类算法

    我正在研究地图上的聚类点 纬度 经度 对于快速且可扩展的合适算法有什么建议吗 更具体地说 我有一系列纬度 经度坐标和一个地图视口 我正在尝试将靠近的点聚集在一起以消除混乱 我已经有了解决问题的方法 see here http bouldr
  • 优化 HTML 属性压缩顺序

    我在某处读到 按一定顺序组织 HTML 属性可以提高 HTML 文档的压缩率 我想我是从 Google 或 Yahoo 推荐的更快网站上读到这篇文章的 如果我没记错的话 建议是将最常见的属性放在第一位 例如id等 然后将其余的按字母顺序排列
  • 找到质数?

    为了判断 N 是否是质数 我们只需要查找所有小于或等于 sqrt N 的数字 这是为什么 我正在编写 C 代码 因此试图理解其背后的原因 如果 N 是一个正整数 且能被两个正整数 1 和 N 整除 则 N 是素数 由于数字的约数不能大于该数
  • 用于基本要素匹配的最坏情况 NlogN 算法

    查找两个相同大小数组的元素之间的唯一映射 https stackoverflow com questions 4411940 find the unique mapping between elements of two same size
  • 为什么《破解编码面试》这个例子的时间复杂度是O(k c^k)?

    该问题来自 破解编码面试 第 6 版 问题 V1 11 以下代码打印长度为 k 的所有字符串 其中字符 是按排序顺序排列的 它通过生成所有长度的字符串来做到这一点 k 然后检查每个是否已排序 什么是运行时间 package QVI 11 P
  • 在 3d 网格中转发(绘制)线

    我需要类似 Bresenham 算法的东西 但是 对于 3d 网格空间来说不完全是这样 我需要 3d 单元网格 边缘尺寸 1 0 从 S 点开始 前进到 K 点 接触 该线接触的所有单元格 即使只有边缘 点被触摸我需要触摸所有 8 个单元
  • 计算字符串的所有子串中子序列的出现次数

    我想编写一个算法来计算字符串的所有子字符串中字符子序列 不相交 出现的总数 下面是一个例子 字符串 jabcohnnyjohnny 后续 约翰尼 包含子序列的子字符串 jabcohnny jabcohnnyj jabcohnnyjo jab
  • 关于Marching Cubes算法的澄清

    关于Marching Cubes 我对其算法和实现有一些疑问 我已经阅读了 Marching Cubes 的 Paul Bourke 优秀文章以及网站上可用的源代码 但是 我在理解以及如何以自己的方式实现算法方面仍然遇到了一些问题 问题如下
  • Python Pandas:沿一列比较两个数据帧,并返回另一个数据帧中两个数据帧的行内容

    我正在处理两个 csv 文件并作为数据框 df1 和 df2 导入 df1 有 50000 行 df2 有 150000 行 我想将 df2 的 时间 与 df1 求时间差并返回所有列的值 对应相似的行 保存在df3中 时间同步 例如 35
  • 如何求两个地点的经纬度距离?

    我有一组位置的纬度和经度 怎么找distance从集合中的一个位置到另一个位置 有公式吗 半正矢公式假定地球是球形的 然而 地球的形状更为复杂 扁球体模型会给出更好的结果 如果需要这样的精度 你应该更好地使用文森特逆公式 See http
  • 当给定块大小时反转单链表

    有一个单连接链表 并给出了块大小 例如 如果我的链表是1 gt 2 gt 3 gt 4 gt 5 gt 6 gt 7 gt 8 NULL我的块大小是4然后反转第一个4元素 然后是第二个 4 个元素 问题的输出应该是4 gt 3 gt 2 g
  • 坐标算法 - 绕中心旋转

    通过查看这张图片 我想您会很好地理解我的问题 图片已删除 网址不再有效 现在返回广告 所以基本上我想要一个函数 它接受一个对象作为参数 并根据我之前添加的对象数量为该对象提供正确的坐标 假设我将所有这些对象添加到一个数组中 objectAr
  • 这个函数(for循环)空间复杂度是O(1)还是O(n)?

    public void check 10 for string i list Integer a hashtable get i if a gt 10 hashtable remove i 这是 O 1 还是 O n 我猜测 O n 但不是
  • 为什么这个算法的Big-O复杂度是O(n^2)?

    我知道这个算法的大O复杂度是O n 2 但我不明白为什么 int sum 0 int i 1 j n n while i lt j sum 即使我们设定了j n n一开始 我们在每次迭代期间递增 i 并递减 j 因此最终的迭代次数不应该比n
  • 贝尔曼福特算法可以有任意的边顺序吗?

    我刚刚开始学习新算法 但当我阅读 极客为极客而写的贝尔曼福特算法 时 我陷入了困境 http www geeksforgeeks org dynamic programming set 23 bellman ford algorithm h
  • 在树结构的 Big-O 表示法中:为什么有些来源引用 O(logN),有些来源引用 O(h)?

    在研究遍历二叉搜索树的任何算法的复杂性时 我看到两种不同的方式来表达同一件事 版本 1 最坏情况下的遍历算法对树的每个高度进行一次比较 因此复杂度是O h 版本 2 最坏情况下的遍历算法对树的每个高度进行一次比较 因此复杂度是O logN
  • 无法理解Peterson算法的正确性

    我在这里讨论彼得森算法的一个场景 flag 0 0 flag 1 0 turn P0 flag 0 1 turn 1 while flag 1 1 turn 1 busy wait
  • 在一个区域中拟合二维多边形的算法?

    这有标准吗 算法名称 说 我有 10 个不同大小的多边形 我有一个特定大小的区域 我想知道如何填充该区域中的最多多边形 以及它们是如何拟合的 笔记 多边形可以根据限制集进行旋转 一个可能的名称是包装问题 http en wikipedia

随机推荐

  • 带有石英的自定义 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