优化arrayRotateLeft方法

时间:2017-04-07 03:49:34

标签: java arrays optimization

我的方法有效,但显然对于Hackerrank来说,处理大数字时速度不够快。我该如何优化它? n是数组大小,k是数组元素应向左旋转的次数。

 public static int[] arrayLeftRotation(int[] a, int n, int k) {
        int[] holder = new int[n];
        for(int m=0; m<k; m++)
            {
      for(int b = 0; b<n; b++)
          {
          if(b==0) holder[n-1]=a[b];
          else holder[b-1]=a[b];
          }
          a = holder;
          holder = new int[n];
        }
        return a;
    }

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作

public static int[] arrayLeftRotation(int[] a, int n, int k) {
    int[] b = new int[n]
    for(int i = 0; i<n; i++)
        b[i] = a[(i+k)%n]
    return b;
}

答案 1 :(得分:1)

我希望使用System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)来实现此功能,您可以将n替换为src.length。像,

public static int[] arrayLeftRotation(int[] src, int k) {
    int[] dest = new int[src.length];
    System.arraycopy(src, k, dest, 0, src.length - k);
    System.arraycopy(src, 0, dest, src.length - k, k);
    return dest;
}

您也可以在@StinePike之类的一行中实施IntStream提议的解决方案

public static int[] arrayLeftRotation(int[] a, int k) {
    return IntStream.range(0, a.length).map(i -> a[(i + k) % a.length]).toArray();
}