如何在带有偏移量的排序数组中查找数字的索引

时间:2013-08-18 18:22:20

标签: algorithm sorting data-structures

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

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

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

分配问题是如何在数组中查找数字的索引。对于排序数组,解决方案显然是二进制搜索以查找索引(有或没有递归)。

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

1 个答案:

答案 0 :(得分:0)

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

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

进行单个二进制搜索