【发布时间】:2018-01-31 18:33:42
【问题描述】:
给定一个整数数组,该数组已排序(按升序)并已按顺时针方向旋转了某个数字 k。找到并返回 k。 我写的代码如下.. 我得到了错误的结果。
public class CheckRotation {
public static int arrayRotateCheck(int[] arr){
/* Your class should be named CheckRotation
* Don't write main().
* Don't read input, it is passed as function argument.
* Return output and don't print it.
* Taking input and printing output is handled automatically.
*/
int s=0;
int next=0;
int prev=0;
int mid=0;
int n = arr.length-1;
while(s<=n)
{
mid= s+(n-s)/2;
next=(mid+1)%n;
prev=(mid-1)%n;
if(arr[s]<=arr[n])
{
return s;
}
if(arr[mid]<=next && arr[mid]<=prev)
{
return mid;
}
if(arr[mid]<arr[n])
n= mid-1;
if(arr[mid]>arr[s])
s= mid +1;
}
return Integer.MAX_VALUE;
}
}
【问题讨论】:
-
您的输入、当前输出和预期输出是什么?看起来很有可能在第一次迭代时返回 s,这将是 0。您可能需要重新考虑您的算法,它看起来类似于二进制搜索,而线性可能更容易和更直接