考虑到我有一个排序数字的数组,其中0到N-1偏移,其中N是数组的长度。完全排序的数组具有0个零偏移量,如下所示
[1, 2, 4, 11, 15, 19, 26]
数组[19, 26, 1, 2, 4, 11, 15]
的偏移量为2,因为较小的数字从第二个索引开始并回绕到第一个索引。
分配问题是如何在数组中查找数字的索引。对于排序数组,解决方案显然是二进制搜索以查找索引(有或没有递归)。
如何在带偏移量的数组中找到数字的索引?偏移量未知。我想要一个解决方案的大纲,我会尝试用我熟悉的语言来实现它。
答案 0 :(得分:0)
使用三元搜索查找数组的最大元素。所以我们假设X是数组中最大元素的索引。因此,如果X < N-1
,偏移将是X + 1,否则偏移= 0。
然后,您可以对eash元素进行两次二进制搜索,以查找该数字的索引。第一个将在0 - (offset-1)
范围内运行,第二个将在offset - N
之间。如果您允许使用更多空间,那么您也可以将数组附加到自身,然后为每个查询从offset - (N+offset-1)