搜索数组中元素的算法

标签 algorithm

这是另一个面试问题

数组包含元素,如果前一个元素是 x,则下一个元素可以是 x+1x-1

Prev element = x
Next element = x+1/ x-1

示例:{2, 3, 4, 3, 2, 1, 0, -1, 0, 1, 2, 3, 2, 1}

如果我需要搜索 0,我们可以选择什么最佳算法?

如果我对它进行排序,那么它将是 O(nlogn),我可以在 O(n) 中遍历数组,所以 O(n) 仍然更好

创建二叉搜索树将再次是 O(n),在 BST 中搜索是 O(log),所以仍然是 O(n)。

它是一个随机数组,下一个元素是 +1 或 -1 不会导致任何搜索模式。 如果你们能想到可以在此处使用的任何搜索模式来执行更好的搜索,请告诉我。

最佳答案

显而易见的事情是:

  1. 考虑第一个值,假设该值为 n。是 0 吗?
  2. 如果是,您就完成了。
  3. 如果不是,则向前走abs(n)个元素,转步骤1。

您可以跨过多个元素,因为两个相邻值之间的绝对差始终为 1。

因此,鉴于您问题中的数组,您执行以下操作:

  • 项目 0 是 2。它不是零,因此您转到项目 2。
  • 第 2 项是 4。这不是零,向前移动 4 项到第 6 项。
  • 第 6 项是 0。你完成了。

关于搜索数组中元素的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22269483/

相关文章:

c# - 合并树节点

algorithm - 进化图像匹配模拟的新适应度测量

algorithm - 面试题: Merge two sorted singly linked lists without creating new nodes

algorithm - 寻求近似算法以找到区域中最大的清晰圆圈

algorithm - 如何优化0/1背包的解决方案?

python - 有没有更有效的方法从另一个数组生成一个数组,规则有点复杂?

algorithm - 如何在 "Fast Approximated SIFT"中旋转方向?

c++ - STL 容器中的有序排序

c - 如何在另一个链表中获取链表的奇数 inode ?我不想使用双指针

c# - 是否可以将其作为单个高效的 LINQ 查询来完成?