【问题标题】:How to find an index of an number in a sorted array with an offset [duplicate]如何在具有偏移量的排序数组中查找数字的索引[重复]
【发布时间】:2013-08-19 03:40:02
【问题描述】:

假设我有一个排序数字数组,偏移量为 0 到 N-1,其中 N 是数组的长度。一个完全排序的数组的零偏移量为 0,如下所示

[1, 2, 4, 11, 15, 19, 26]

数组[19, 26, 1, 2, 4, 11, 15] 的偏移量为 2,因为较小的数字从第二个索引开始并环绕到第一个。

赋值问题是如何在数组中找到一个数字的索引。对于已排序的数组,解决方案显然是通过二分查找来查找索引(有或没有递归)。

如何在有偏移的数组中找到数字的索引?偏移量未知。我想要一个解决方案的大纲,我会尝试用我熟悉的语言来实现它。

【问题讨论】:

  • 我不确定你在问什么。对于零偏移量的简单情况,x 的索引是x - 1——不需要二分查找。对于数组有偏移的一般情况,偏移显然是1 - array[0] + N。因此,再次使用模运算很容易找到任何数字的索引。我错过了什么吗?
  • @Jon - 示例数组是一个简化。这些数字不必是升序或降序,它们之间有固定的数字差。它们可以按任何顺序排列。
  • @Kartik:好的,现在说得通了。
  • @PeterdeRivaz 我如何找到查找枢轴元素?我不知道偏移量是多少。
  • 你的号码必须全不一样,否则问题在O(N)以下无解。那是剧透。

标签: algorithm sorting data-structures


【解决方案1】:

使用三元搜索查找数组的最大元素。所以让我们假设 X 是数组中最大元素的索引。所以偏移量将为 X+1,如果X < N-1,否则偏移量=0。

然后您可以对 eash 元素进行两次二进制搜索以找到该数字的索引。第一个将在0 - (offset-1) 的范围内运行,第二个将在offset - N 之间运行。如果您被允许使用更多空间,那么您还可以将数组附加到自身,然后为每个查询从 offset - (N+offset-1) 进行一次二进制搜索

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2017-07-24
    • 2019-06-24
    • 2014-11-12
    • 1970-01-01
    相关资源
    最近更新 更多