【发布时间】: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