k旋转移位数组并找到x?

Posted

技术标签:

【中文标题】k旋转移位数组并找到x?【英文标题】:k-rotated-shifted array and finding x? 【发布时间】:2015-03-17 16:56:35 【问题描述】:

我们说一个k-rotated-shifted array 到一个数组,这样用k 旋转就可以排序。例如:A=[10, 15, 20, 1, 7],与k=2。我提出了一种算法,可以在这个 k-rotated-shifted 数组中找到像 x 这样的键。

谁能帮我验证一下?

编辑 1:我的新代码是:

 int S(int l, int r, int x)
 int f=A[l], m=A[(l+r)/2], la=A[l];
if (x==f or x==m or x==la)
     return 1;
else if ((x< f and x>m) || (x>f and x>m) || (x<f and x<m))
   return S((l+r)/2, r, x);
   else
    return S(l,(l+r)/2, x);


【问题讨论】:

【参考方案1】:

打破在 3,4,5,1,2 中找到 1。中断查找不存在的键,因为基本情况仅在找到键时触发,从而导致无限循环。

要修复,请使用条件

first < middle < x or middle < x < first or x < first < middle.

还要注意,如果我们取(i + j) / 2 的上限,那么与last 比较是多余的。

【讨论】:

我无法得到它。为什么我的条件失败了? @Prof.KosiNoura 工作,但需要时间 O(log^2 n)。 这个主要代码在 O(log n) 上工作?只需要纠正条件? 等等。如果我在一行上添加这些条件,最后一行是用来做什么的? 没关系,但是请说为什么当x不在数组中时,它会陷入无限循环

以上是关于k旋转移位数组并找到x?的主要内容,如果未能解决你的问题,请参考以下文章

循环移位算法

移位操作之旋转移位

算法作业!!求两个不等长有序数组的中位数!

不用排序怎样快速找到中位数,最好是一遍下来得到结果,求算法或者思路 谢谢!

有序数组寻找中位数以及寻找K大元素

无序数组寻找中位数