算法:找到圆中的峰值

2024-05-26

Given n排列成圆圈的整数显示了一种可以找到一个峰值的有效算法。峰值是不小于它旁边的两个数字的数字。

一种方法是遍历所有整数并检查每个整数以查看它是否是峰值。这产生O(n)时间。似乎应该有某种方法来分而治之,以提高效率。


EDIT

好吧,基思·兰德尔证明我错了。 :)

这是 Keith 用 Python 实现的解决方案:

def findPeak(aBase):
    N = len(aBase)
    def a(i): return aBase[i % N]

    i = 0
    j = N / 3
    k = (2 * N) / 3
    if a(j) >= a(i) and a(j) >= a(k)
        lo, candidate, hi = i, j, k
    elif a(k) >= a(j) and a(k) >= a(i):
        lo, candidate, hi = j, k, i + N
    else:
        lo, candidate, hi = k, i + N, j + N


    # Loop invariants:
    # a(lo) <= a(candidate)
    # a(hi) <= a(candidate)

    while lo < candidate - 1 or candidate < hi - 1:
        checkRight = True
        if lo < candidate - 1:
            mid = (lo + candidate) / 2
            if a(mid) >= a(candidate):
                hi = candidate
                candidate = mid
                checkRight = False
            else:
                lo = mid
        if checkRight and candidate < hi - 1:
            mid = (candidate + hi) / 2
            if a(mid) >= a(candidate):
                lo = candidate
                candidate = mid
            else:
                hi = mid

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

算法:找到圆中的峰值 的相关文章

  • 寻找下一个素数的最佳方法(Java)

    我被要求编写一个程序以最佳方式找到下一个素数 我编写了这段代码 但找不到最佳答案 有什么建议么 public static int nextPrime int input input now find if the number is pr
  • 识别鼠标移动的算法

    我想知道是否有任何研究 算法可以指定鼠标在识别 等字符时的偏差量使用鼠标绘制 某种光学字符识别 但可能是一个更简单的版本 是否有某种算法可以让我说用户绘制的问号确实是一个问号 而不是其他具有一定准确性的东西 就像 Windows 平板电脑软
  • StackOverflowError 计算 BigInteger 的阶乘?

    我正在尝试编写一个Java程序来计算大数的阶乘 它似乎BigInteger无法容纳这么大的数量 下面是我编写的 简单的 代码 public static BigInteger getFactorial BigInteger num if n
  • 数组中最远的相等元素

    假设你有一个未排序的数组 你如何找到两个相等的元素 使它们成为数组中最远的元素 例如8 7 3 4 7 5 3 9 3 7 9 0ans 将是7 9 7 1 8 我想到了以下几点 initialise max 0 using hashing
  • 合并多边形的高效算法

    我有一个多边形列表 在这个列表中 一些多边形重叠 或者接触其他多边形 我的任务是合并所有相互重叠或接触的多边形 我有一个union执行此操作的方法 做到这一点最有效的方法是什么 我目前能想到的是循环遍历多边形列表 检查合并列表以查看该多边形
  • 如何检查无向图是否有奇数环

    我试图找到一个 O V E 时间算法来检查是否已连接 无向图有或没有奇数环 我正在考虑对图进行广度优先搜索 并尝试将顶点标记为黑色和白色 以便没有两个标记为相同颜色的顶点相邻 是否有任何已知的更简洁的算法可以在线性时间内解决这个问题 你的方
  • 极小极大算法

    我有一个关于 Minimax 算法的简单问题 例如 对于 tic tac toe 游戏 如何确定每个玩家玩的效用函数 它不会自动执行此操作 是吗 我必须对游戏中的值进行硬编码 它无法自己学习它们 不是吗 不 MiniMax 不会学习 它是暴
  • OpenCV 旋转图像而不裁剪澄清

    我想扩展这个主题 参考用户 Lars Schillingmann 给出的这个 SO 问题和接受的答案 在 C 中的 OpenCV 中旋转图像而不裁剪 https stackoverflow com questions 22041699 ro
  • 处理流星中的长服务器端计算

    我正在使用 jimp https www npmjs com package jimp https www npmjs com package jimp 在meteor JS中生成图像服务器端 换句话说 我正在使用递归算法 计算 图像的像素
  • 查找文本中所有关键字的有效算法

    我有很多字符串 其中包含许多不同拼写的文本 我通过搜索关键字来标记这些字符串 如果找到关键字 我将使用该关键字的关联文本 假设搜索字符串可以包含文本 schw schwa 和 施瓦茨 我有三个关键字 全部解析为文本 schwarz 现在我正
  • 序列和与 GCD

    大约一个月前 我在编程挑战中遇到了这个问题 但社论尚未发布 所以我在这里问 有一个大小为 N 的数组 A 求 A 的 K 个长度子序列的总和 GCD Example 如果 A 1 2 3 且 K 2 1 2 3 总和 1 GCD 3 1 3
  • 一种良好且简单的随机性测量方法

    获取一长整数序列 例如 100 000 个 并返回序列随机性的测量值的最佳算法是什么 该函数应返回单个结果 如果序列并非完全随机 则返回 0 如果完全随机 则返回 1 如果序列有点随机 它可以给出介于两者之间的东西 例如0 95 可能是一个
  • 如何在 JavaScript 中构建树模式匹配算法?

    好吧 这是一个有点复杂的问题 但是 tl dr 基本上是如何使用 模式树 解析 实际树 如何检查特定的树实例是否与特定的模式树匹配 首先 我们有我们的结构模式树 模式树通常可以包含以下类型的节点 sequence节点 匹配一系列项目 零个或
  • 如何知道您的单元测试装置是否“尺寸合适”?

    您如何知道 测试夹具 的尺寸是否合适 我所说的 测试夹具 是指一个包含大量测试的类 我在测试装置中一直注意到的一件事是它们变得有点冗长 鉴于它们也可能不够详细 您如何了解单元测试的大小是否合适 我的假设是 至少在 Web 开发的背景下 您应
  • 有哪些学习线程编程的好资源? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 随着多核CPU在桌面上的兴起 多线程技能将成为程序员的宝贵资产 您能为想要学习线程编程的程序员推荐一些好的资源 书籍 教程 网站等 吗 看
  • 如何将多边形放入另一个多边形内[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有两个多边形 如下图所示 左边是 粗多边形 右边是 最终多边形 现在 我正在寻找算法来将 最终多边形 拟合到 粗糙多边形 内 并具有
  • 什么是“朴素”算法,什么是“封闭式”解决方案?

    我有一些关于描述算法时使用的术语语义的问题 首先 朴素 算法是什么意思 这与给定问题的其他解决方案有何不同 解决方案还可以采取哪些其他形式 其次 我听到很多人提到 封闭式 解决方案 我也不知道这意味着什么 但在尝试解决递归关系时经常会出现
  • heapq.nlargest 的时间复杂度是多少?

    我在看演讲者说 获得t列表中最大的元素n元素可以在O t n 这怎么可能 我的理解是创建堆将是O n 但是复杂度是多少nlargest本身就是O n t or O t 实际的算法是什么 在这种情况下 说话者是错误的 实际成本是O n log
  • 重写修改后的 goto 语义的算法

    我有一大堆使用旧的自行设计的脚本语言编写的遗留代码 我们将它们编译 翻译成 javascript 该语言有条件跳转 跳转到标签 与普通 goto 语句的区别在于 不可能向后跳转 该语言中没有嵌套的 if 语句或循环 由于 javascrip
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素

随机推荐

  • 剃须刀付款给予 未发现合适的付款方式错误

    所以我正在实现这个简单的剃 刀支付集成 但它给了我一个 找不到合适的付款方式 错误 我之前尝试过选择付款选项表格 但也不起作用 val razorpay RazorpayClient my key my secret key val ord
  • 获取现有 SVG 元素的属性并使用 d3.js 绑定为数据

    我有一个现有的 svg 元素 例如
  • 配置多个数据库Entity Framework 6

    在我的解决方案中 我有 2 个使用 Entity Framework 6 的项目 每个项目都指向不同的数据库 都使用相同的数据提供 SQL Server 我的解决方案中的第三个项目需要使用这两个数据库 我的问题是如何配置这些上下文 我尝试在
  • OOP Javascript - 是否需要“获取属性”方法?

    给定一个非常简单的 js 对象构造函数及其原型 function MyTest name this name name MyTest prototype getName function var myName this name retur
  • 如何在 Perl 中使用变量作为模块名称?

    我知道可以在 Perl 中使用变量作为包变量的变量名 我想使用变量的内容作为模块名称 例如 package Foo our names blah1 blah2 1 在另一个文件中 我希望能够将标量的内容设置为 foo 然后访问中的名称数组F
  • 分解大于 100 位的整数 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 X and Y是大于 100 位的整数 求整数P其在范围 X Y 并且保证了 最佳 素数分解 即具有最多的分解 unique主要原因 我所
  • 我可以指定默认的 AWS 配置文件吗?

    在我的开发环境中 我经常在多个 AWS 访问密钥之间切换 所以在我的 aws credentials文件 我有几个配置文件 然后 我可以通过指定以下内容将这些配置文件与 aws cli 一起使用 profile
  • XAMPP:作曲家返回错误而不是创建新的 laravel 项目

    使用ubuntu 16 04 LTS 在两个不同版本的地方安装了PHP 在root 7 0和XAMPP 5 6中 composer全局安装 现在我无法从lamp htdocs创建composer项目 xampp运行良好 作曲家已安装并运行良
  • 越狱的 iOS 从后台应用程序截图

    我正在为自己构建一个实用程序应用程序 当该实用程序在后台运行时 它可以截取前台运行的任何内容的屏幕截图 该实用程序将在越狱设备上运行 因此它可以访问私有 API 而不受沙箱的限制 由于实用程序应用程序在后台运行 作为守护程序或使用后台程序
  • 传递到字典中的模型项的类型为“Sitecore.Mvc.Presentation.RenderingModel”,但此字典需要类型为“X”的模型项

    我正在使用 Sitecore 7 和 ASP NET MVC 3 构建解决方案 并尝试使用自定义模型类 如中所述约翰 韦斯特的这篇博文 http www sitecore net france Community Technical Blo
  • @Nullable 和 SonarQube “有条件执行的块应该可达”警告

    包有以下package info java ParametersAreNonnullByDefault package foo import javax annotation ParametersAreNonnullByDefault 类有
  • Typescript 类似断言的类型保护

    这是否可以在没有限制的情况下限制类型if通过函数调用never返回例如undefined like assert在打字稿中 示例代码 interface Foo bar void function getFoo Foo undefined
  • 带有存储在文件中的通配符的 grep

    我希望 grep 通过读取需要从文本文件中过滤掉的内容来过滤掉行 这是我给 grep 的内容 它存储在foo txt Users 1337 X Users 1337 R Users 1337 W 这是它应该过滤的内容 它存储在bar txt
  • 包含 ListView 更新、CellValueFactory 的 JavaFX TableView

    我确实有一个引擎 其中包含以下列表中的部件 UPDATE 我更新了文本以提供示例 我想要一个包含 2 列 名称 零件 的引擎 TableView 我希望将 Column 部分呈现为 TableCell 中的 ListView 因此我重写了该
  • 在 CGridView 中显示另一个模型的属性

    在 Yii 中 我正在做多模型 我的数据库是这样的 Group id name Member id group id firstname lastname membersince 在组控制器中 我想显示成员的属性 一切工作正常 但是当我使用
  • Zuul不转发请求到其他微服务

    我正在使用 Spring Boot 微服务 我已经配置了 eureka zuul 代理和另一个微服务 帐户 如果我直接从帐户拨打电话 则工作正常 帐户和 zuul 服务器都显示在 eureka 上 当我尝试使用 zuul 代理进行访问时 它
  • CTRL + 单击 Sublime Text 2 中的绑定

    我多年来使用 IDE 的一个长期习惯是 CTRL 或命令 单击选择一个完整的单词 这相当于双击当前 ST2 中的单词 我希望能够在ST2中恢复这个能力 我会用按键绑定还是插件来解决这个问题 如果您创建一个sublime text 2 Pac
  • 如何用 C# 发送原始以太网数据包? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有没有办法通过 C 将原始数据包以太网发送到其他主机 在 Windows 7 中 如果有区别的话 根据 Saint pl 的建议 我找
  • 在浏览器中下载视频,而不是在新选项卡中播放 [CORS]

    I have a 并在其内部href属性 当我点击该属性时 我从第 3 方 api 获得了一个视频 URL a 浏览器打开一个新选项卡并播放视频而不是下载视频 PROBLEM 我需要实现的是点击后直接下载视频 a 而不是在新标签中播放并强制
  • 算法:找到圆中的峰值

    Given n排列成圆圈的整数显示了一种可以找到一个峰值的有效算法 峰值是不小于它旁边的两个数字的数字 一种方法是遍历所有整数并检查每个整数以查看它是否是峰值 这产生O n 时间 似乎应该有某种方法来分而治之 以提高效率 EDIT 好吧 基