在旋转排序数组中搜索数字

2024-04-15

给定一个可以旋转的排序数组,以最小的时间复杂度在其中找到一个元素。

例如:数组内容可以是[8,1,2,3,4,5]。假设您在其中搜索 8。


该解决方案仍然适用于二分搜索,因为您需要将数组划分为要检查的两个部分。

在排序数组中,您只需查看每个部分并确定该元素是位于第一部分(我们称之为 A)还是第二部分(B)。由于根据排序数组的定义,分区 A 和 B 将被排序,因此这仅需要对分区边界和搜索键进行一些简单的比较。

在旋转排序数组中,只能保证 A 和 B 之一是有序的。如果元素位于已排序的部分内,则解决方案很简单:只需像执行普通二分搜索一样执行搜索即可。但是,如果您必须搜索未排序的部分,则只需在未排序的部分上递归调用搜索函数即可。

这最终导致时间复杂度为O(lg n).

(实际上,我认为这样的数据结构会有一个索引来指示数组已旋转了多少个位置。)

Edit: 在 Google 上搜索后我发现this http://www.codeguru.com/forum/showthread.php?t=407535CodeGuru 上讨论同样问题的话题有些过时(但正确)。为了添加我的答案,我将复制那里给出的一些伪代码,以便它与我的解决方案一起出现在此处(思路遵循相同的思路):

Search(set):
    if size of set is 1 and set[0] == item 
        return info on set[0]
    divide the set into parts A and B
    if A is sorted and the item is in the A's range
        return Search(A)
    if B is sorted and the item is in the B's range
        return Search(B)
    if A is not sorted
        return Search(A)
    if B is not sorted
        return Search(B)
    return "not found"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在旋转排序数组中搜索数字 的相关文章

  • Mathematica 中的分类树实现

    我想使用以下方法实现简单的分类树 二元分类 数学 我怎样才能实现二叉树数学 有这样做的符号吗 我想说这取决于你想用数据结构做什么 您可以利用 Mathematica 表达式本身就是树的事实 如果只有叶节点相关 则使用嵌套列表 例如 1 2
  • 是否可以反转包含循环的链表?

    我正在看一些面试问题 其中一个要求反转包含循环的链表 所以假设我有一个如下所示的链接列表 F lt E V A gt B gt C gt D 然后反转列表将创建以下内容 F gt E V A lt B lt C lt D 这里的问题是 C
  • clojure 中的反转哈希映射

    我在 clojure 中有哈希映射 key1 value1 key2 value2 key3 value1 我需要将其转换为哈希映射 value1 key1 key3 value2 key2 有 Clojure 方法可以做到这一点吗 clo
  • 不可变数据结构性能

    我不明白作为一个集合的东西怎么可能是不可变的并且仍然具有可接受的性能 根据我在 F Sets 中读到的内容 内部使用红黑树作为其实现 如果每次我们想要向红黑树添加新内容时 我们基本上都必须重新创建它 那么它如何才能具有良好的性能呢 我在这里
  • 将简单的单色绘图图像转换为二维文本数组

    我正在尝试开发一种算法 将简单的单线图像 即迷宫 转换为文本二维数组 例如 下面的图像 它将被转换为以下文本数组
  • C++ 中的 Java HashSet 等效项

    我很好奇 C 中是否有类似于 Java HashSet 的东西 IE 一个快速查看的数据结构 因为我只会运行 contains e 在上面 同样 如果你能启发我如何做 contains 无论您提出什么数据结构 我都会非常感激 O 请不要发帖
  • 修正增量函数的摊余成本

    因此 对于 n 位二进制字符串 A 0 n 1 其中 A 0 是最低有效位 A n 1 是最高有效位 增量算法为 Increment A n i 0 while i
  • 查找数组中的 K 个最小值(堆 vs QuickSelect)

    假设我们有一个数组 我们希望找到它的 K 个最小值 有两种方法 1 使用快速选择算法 O n 时间复杂度和O 1 空间 2 使用最小堆数据结构 O NlogK 时间复杂度和O K 空间 我想知道什么时候一个比另一个更受青睐 我想这两个都可以
  • 理解 C:指针和结构

    我试图更好地理解 c 但很难理解在哪里使用 和 字符 一般而言只是结构 这是一些代码 void word not lc3 word t R lc3 word t A int ptr ptr R ptr 0 1 printf this is
  • 如何在 O(n) 时间内遍历二叉树而不需要额外的内存

    给定一棵带有整数 左指针和右指针的二叉树 如何在 O n 时间和 O 1 额外内存 无堆栈 队列 递归 内遍历该树 This guy http nandacumar blogspot com 2006 06 traversing tree
  • ConcurrentLinkedDeque 与 LinkedBlockingDeque

    我需要一个线程安全的 LIFO 结构 并发现我可以使用线程安全的实现Deque为了这 Java 7 引入了ConcurrentLinkedDeque http docs oracle com javase 7 docs api java u
  • 如何在 dijkstra 算法中以 O(log n ) 时间更新优先级队列中的键?

    过去一周我一直在研究 dijkstra 算法 我在 java 中有正确的运行代码 它使用数组来计算标准 findMin 函数 该函数为您提供距离最小的顶点 显然它是 O n 现在我希望使用优先级队列 最小堆 来实现它 我的思考过程是 whi
  • 为什么jdk中没有ConcurrentLinkedHashMap类?

    这个问题直接接着问从我之前的问题来看 https stackoverflow com q 12299731 1527084 我想我的第二个问题的答案是否定的 所以我想了解为什么 java util concurrent 包中没有 Concu
  • 什么时候使用哈希表?

    什么情况下使用哈希表可以提高性能 什么情况下不能 哪些情况不适合使用哈希表 什么情况下使用哈希表可以提高性能 什么情况下不能 如果您有理由关心 请使用哈希表和您正在考虑的其他任何内容来实现 将您的实际数据放入其中 并衡量哪个性能更好 也就是
  • java数据结构模拟数据树

    我需要帮助定义使用什么方法 我有一个 SOAP 响应 给我一个 xml 文件 我需要在屏幕上显示 3 个相关列表 当您在第一个列表中选择一个项目时 相应的选择将出现在第二个列表中 依此类推 我只对从 xml 流中提取数据后如何有效地组织数据
  • 我需要一个支持高效随机访问和 O(k) 插入和删除的容器

    我再次尝试问同样的问题question https stackoverflow com questions 3808708 delete parts of a dynamic array and grow other 但我最终提出了一个不同
  • 时间序列数据预处理 - numpy strides 技巧以节省内存

    我正在预处理一个时间序列数据集 将其形状从二维 数据点 特征 更改为三维 数据点 时间窗口 特征 在这样的视角中 时间窗口 有时也称为回顾 指示作为输入变量来预测下一个时间段的先前时间步长 数据点的数量 换句话说 时间窗口是机器学习算法在对
  • 子序列和

    给定一个整数数组 例如 1 2 3 1 查找是否存在总和为0并返回它 例如 1 2 3 or 2 3 1 检查每个子序列是O n 2 这效率太低了 有改进的想法吗 创建一个新数组 其中每个元素等于前一个元素加上该元素的总和 Input 1
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧

随机推荐

  • Angular 4 和 ng-template

    我收到此警告 The
  • 使用python(谷歌应用程序引擎)获取上传文件的名称和扩展名

    我正在使用表单将文件上传到谷歌应用程序引擎并将它们存储在数据存储中 我还想存储原始文件名和扩展名以供演示之用 有没有办法从发布服务器端检索此数据 或者只能在客户端收集并作为单独的字段发送 例如http www tinyurl com 5jy
  • 使用已填充的模型添加非空且唯一的字段

    我的应用程序中有一个模型在带有一些条目的服务器中运行 我需要添加一个SlugField 对于该模型来说是唯一且非空的 这SlugField将根据trading name 我更改了模型以添加这个新字段并修改了保存方法 class Suppli
  • jqGrid treeGrid 捕获展开折叠事件

    我使用 jqGrid 来构建一些大树 现在我想记住cookie中展开和折叠的节点 所以我想捕捉展开和折叠事件 我在手册中找不到它 所以我用这种方式解决了 grid find div treeclick bind click function
  • PRY 或 IRB - 重新加载类并忘记已删除的功能

    如果您更改文件然后在 pry 或 irb 中重新加载它 它似乎会拾取您添加到该类中的任何新功能 但不会忘记您从该类中删除的旧功能 重现步骤 使用单一方法创建一个类 例如 say hello 打开 PRY 或 IRB 并且load my cl
  • 使用 $.html() 时如何提高渲染性能

    我正在研究骨干demo app https jsfiddle net o75r7fu9 8 显示推文列表 当我用不同的数据替换所有 推文 时 我使用以下命令清除列表 html render function item table html
  • 如何将powershell UTC日期时间对象转换为EST

    我收到了日期时间字符串 格式如下 2017 08 03T12 30 00 000Z 我需要能够将它们转换为 EST 我尝试过的每个函数都会抛出一个或另一个错误 通常是 String was not recognized as a valid
  • translate3d() 导致 jQuery 悬停/单击事件无法正确触发

    在分析不同 CSS 动画类型上的 jQuery 鼠标事件时 我注意到 translate3d 会导致悬停和其他事件无法正确触发 在一个基本示例中 我从右到左对块列表进行动画处理 翻转时 我将悬停的 LI 背景设置为绿色 注意 测试是为 we
  • 实时音高检测

    用于实时检测用户歌唱的音调FFT https stackoverflow com questions 1351381 fft problem returns random results and 自相关 https stackoverflo
  • 为什么不能使用“new”运算符创建泛型类型的实例?

    我发现了很多关于how克服这个限制 但没有说明为什么存在这个限制 除了this one https stackoverflow com questions 75175 create instance of generic type in j
  • 为什么我不应该为 React 和 babel 使用 CDN?

    当我学习 jQuery 和 Bootstrap 时 我们 我的学习 Web 框架的菜鸟同胞 被告知 CDN 有很多好处等等 现在我正在涉足 React Babel 我们被告知应该从我们的主机服务器下载文件并准备好一切 但我们仍然能够使用 C
  • int[] 数组和 int array[] 之间的区别

    最近一直在思考两种定义数组方式的区别 int array int array 有区别吗 它们在语义上是相同的 这int array 添加语法只是为了帮助 C 程序员习惯 java int array更可取 并且更不易混淆
  • 如何重构代码以在主线程上调用 AppDelegate?

    我最近开始将我的项目从 Swift 3 Xcode 迁移到 Swift 4 Xcode 我的应用程序在运行时崩溃 因为主线程清理程序允许访问UIApplication shared delegate仅在主线程上 导致启动时崩溃 我有以下代码
  • youtube 视频作为网站背景

    有没有办法将 youtube 视频嵌入到带有 html css 和 javascript 的网页背景中 并将实际网站内容放在顶部 如何 基本上 它应该是一个自动播放 静音的视频 但访问者可以调高音量 并且该网站应该在其之上运行良好 该网站很
  • 来自直播流的语音到文本[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 Java 应用程序 我想要转录的不是一个文件 而是一个由 Wowza 提供的实时流 rtmp
  • 如何定位除悬停在 div 上之外的同一类的所有 div?

    我有一组 div 都具有相同的类 如果可以使这更容易 它们不必具有相同的类 理想情况下 我想要的是 当用户将鼠标悬停在这些 div 之一上时 其他 div 每个都有背景图像 全部变成灰色 以将焦点放在当前悬停的 div 上 如果是悬停在上面
  • 在两个或多个窗口之间拖放 QDockWidget

    我想知道是否有人知道是否可以拖动QDockWidget http doc qt nokia com latest qdockwidget html从一个窗口到另一个窗口 我正在开发一个有很多窗口的应用程序 每个窗口都有特定的用途 我想使用
  • 使用 OpenXML 打开点文件

    我需要打开一个 DOT word 文档模板 文件 替换填充符并将其另存为文档文件 打开 DOT 文件时 我收到 文档文件已损坏 是否可以使用 OpenXML 处理 DOT 文件 UPDATE 我正在将 DOT 文件另存为 XML 手动使用
  • 如何在 emacs 中以 info 模式打开 *.info 文件?

    C x C f blah info以基础金属模式打开文件 我用过apropos并发现Info mode我认为这可能会从基本模式更改为信息模式 但这会引发 lisp 错误 如何在 emacs 中打开外部 第三方 info 文件 以便获得与查看
  • 在旋转排序数组中搜索数字

    给定一个可以旋转的排序数组 以最小的时间复杂度在其中找到一个元素 例如 数组内容可以是 8 1 2 3 4 5 假设您在其中搜索 8 该解决方案仍然适用于二分搜索 因为您需要将数组划分为要检查的两个部分 在排序数组中 您只需查看每个部分并确