给定一个整数数组,该数组按顺序排列(按递增顺序)并按顺时针方向旋转某个数字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;
}
}
答案 0 :(得分:0)
如果我正确理解你的问题,如果顺时针旋转各种数组,所有元素都会向左移动。所以基本上[1, 2, 3, 4]
变成了[2, 3, 4, 1]
。而且你试图找到它被移动的数字k
。在那个例子中,它将是1.如果是这样,这是一个解决方案:
public static int RotationCheck(int[] numArray) {
int smallest = Integer.MAX_VALUE;
int k = 0;
//Finding the smallest int
for(int num: numArray) {
if(smallest > num)
smallest = num;
}
//Getting new index of smallest int
for(int i=0;i<numArray.length;i++) {
if(numArray[i] == smallest)
k = numArray.length - i;
}
return k;
}
我首先找到最小值,然后检查它在数组中的位置。由于数组已排序,因此最小的数字最初将是第一个索引。