Java Hackerank左数组旋转



我们有一个方法,其中一个数组和旋转数作为输入传递,并且我们必须在左旋转后返回数组。这是我的解决方案。

static int[] rotLeft(int[] a, int d) {
int i = 0;
int logicBreak = d;
int[] copy = new int[a.length];  // SEE HERE GUYS, WHY THIS WORKS
int[] copy = a;  // AND WHY NOT THIS,
while(logicBreak < a.length){
copy[i] = a[logicBreak];
i++;
logicBreak++;
}
logicBreak = 0;

while(logicBreak < d){
copy[i] = a[logicBreak];
i++;
logicBreak++;
}
return copy;
}

我希望到现在为止没有混乱,如果你有,打开这个页面。所以我的问题很基本。为什么当我做这个int[] copy = new int[a.length];时答案有效,而当我做这int[] copy = a;时答案无效。你能告诉我区别吗,因为我们正在更改复制数组的所有值,所以我们把它做成新的int[]或与数组a相同是怎么回事?我已经创建了一个android应用程序,但我仍然没有得到这个数组的概念,如果有区别,请告诉我。

为了方便起见,这里是完整的代码。

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;
public class Solution {
// Complete the rotLeft function below.
static int[] rotLeft(int[] a, int d) {
int i = 0;
int logicBreak = d;
int[] copy = new int[a.length];
while(logicBreak < a.length){
copy[i] = a[logicBreak];
i++;
logicBreak++;
}
logicBreak = 0;

while(logicBreak < d){
copy[i] = a[logicBreak];
i++;
logicBreak++;
}
return copy;
}
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
String[] nd = scanner.nextLine().split(" ");
int n = Integer.parseInt(nd[0]);
int d = Integer.parseInt(nd[1]);
int[] a = new int[n];
String[] aItems = scanner.nextLine().split(" ");
scanner.skip("(rn|[nru2028u2029u0085])?");
for (int i = 0; i < n; i++) {
int aItem = Integer.parseInt(aItems[i]);
a[i] = aItem;
}
int[] result = rotLeft(a, d);
for (int i = 0; i < result.length; i++) {
bufferedWriter.write(String.valueOf(result[i]));
if (i != result.length - 1) {
bufferedWriter.write(" ");
}
}
bufferedWriter.newLine();
bufferedWriter.close();
scanner.close();
}
}

当您执行以下操作时:

int[] copy = a;

您只是将a的引用分配给copy。他们";参考";到内存中的相同位置。

这是一个演示

int[] a = {1,2,3};
int[] copy  = a;
a[1] = 100;
System.out.println(Arrays.toString(copy));

打印

[1,100,3]

最新更新