下面是代码,我只是想知道其他人是否对它进行了不同的编码。也许我可以做一些小改动。提前谢谢!
public class addRow {
public static int[][] insert(int [][] a, int [] row, int index){
int [][] x = new int[a.length+1][a.length];
int [] temp;
for(int i=0; i<x.length-1; i++)
{
x[i] = a[i];
if(i == index)
{
temp = a[i];
x[i] = row;
x[i+1] = temp;
}
}
return x;
}
public static void main(String[] args){
int[][] a = {{1,2,3},{4,5,6},{10,11,12}};
int[] row = {7,8,9};
int [][] b = insert(a,row ,2);
for(int r=0; r < b.length; r++){
for(int c=0;c< b[r].length; c++){
System.out.print(b[r][c] + " ");
}System.out.println();
}
}
}
答案 0 :(得分:1)
System.arraycopy
是你的答案。
它使用本机代码直接在内存中复制数组,从而提高效率。
答案 1 :(得分:1)
你的循环不符合你的想法。当您在i
中交换行i+1
和x
时,循环的下一次迭代将覆盖您在上一次迭代中放入x[i+1]
的元素。您需要保留一个额外的索引(或拆分循环),以便在点击a
后跟踪x
和index
之间的位置差异。但是,更好的方法是使用System.arraycopy
。
此外,没有理由在其初始化程序中为x
行分配空间,因为无论如何都要为a
(或row
)分配元素。我的方法版本是:
public static int[][] insert(int [][] a, int [] row, int index){
int[][] x = new int[a.length + 1][]; // no second dimension
System.arraycopy(a, 0, x, 0, index);
x[index] = row;
System.arraycopy(a, index, x, index + 1, a.length - index);
return x;
}
答案 2 :(得分:0)
仅仅因为您的代码似乎适用于1
案例,它并不意味着它是正确的。您也尝试过其他案例。
您需要在方法中进行以下更改才能使其正常工作。
public static int[][] insert(int [][] a, int [] row, int index){
int [][] x = new int[a.length+1][a.length];
int j = 0; // New counter for array `a`
// Also `temp` array removed. Not required at all.
for (int i = 0; i < x.length; i++) {
x[i] = a[j];
if (i == index) {
x[i] = row;
x[i + 1] = a[j];
} else {
j++;
}
}
return x;
}
这是您可以优化代码的最大值,而不会更改代码的基础。
现在关于优化大时间,正如其他人建议的那样,您可以使用System#arrayCopy
。