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?的主要内容,如果未能解决你的问题,请参考以下文章