如何在数组中保持旋转计数?

时间:2018-01-31 18:33:42

标签: java arrays counter

给定一个整数数组,该数组按顺序排列(按递增顺序)并按顺时针方向旋转某个数字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;
    }
}

1 个答案:

答案 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;
}

我首先找到最小值,然后检查它在数组中的位置。由于数组已排序,因此最小的数字最初将是第一个索引。