Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 优化阵列法_Java_Arrays_Optimization - Fatal编程技术网

Java 优化阵列法

Java 优化阵列法,java,arrays,optimization,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++)

我的方法很有效,但显然对于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;
    }
公共静态int[]arrayLeftRotation(int[]a,int-n,int-k){
int[]持有人=新的int[n];

对于(int m=0;m您可以执行如下操作

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;
}
公共静态int[]arrayLeftRotation(int[]a,int-n,int-k){
int[]b=新的int[n]

对于(int i=0;i我更愿意用实现它,您可以用
src.length
替换
n

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;
}
您还可以在一行中使用类似的


您必须使用数组吗?您可以使用
Deque
从头部移除元素并将其添加到尾部。如果您需要数组,那么您可能应该将其视为圆形,并使用指向“第一个”的指针元素,并在旋转数组时移动指针。参数需要保持不变,我需要返回一个数组。如果您需要使用数组,我不认为您的代码需要优化可能与
系统#arrayCopy
数组#copyOfRange
类似的方法可以优化您的方法,如果其中任何一种方法你是内在的。否则我会坚持斯汀派克的答案,因为它只是O(n)而不是O(nk)。是的,斯汀派克的答案是最好的。我从一个类似O(n^2)的while循环lol开始。没想到会有O(n)太多了shorter@Bloodluster..为了优化,它必须更快,而不是更短。欢迎来到SO。如果你发现任何有帮助的答案,你可以投票/接受它。你能将其与StinePike的答案进行比较吗?我很好奇,看看是否有什么不同。
public static int[] arrayLeftRotation(int[] a, int k) {
    return IntStream.range(0, a.length).map(i -> a[(i + k) % a.length]).toArray();
}