我考试中的一个问题要求写一些代码来计算2D数组的外部int元素的和。行长度和列长度不一定相等。
[EDIT]角值不能添加一次以上。
我想出了这个代码,它的工作原理,但我想知道是否有更有效的方法来实现相同的结果。谢谢。
for(int i = 0; i < in.length; i ++) {
for(int j = 0; j < in[i].length; j++) {
if(i == 0 || i == in.length - 1) {
sum += in[i][j];
}
else {
sum += in[i][in[i].length - 1 ] + in[i][0];
break;
}
}
}
如果我理解你的问题,那么你可以首先提取一个方法来添加一个数组的元素,如
public static int sumArray(int[] in) {
int sum = 0;
for (int val : in) {
sum += val;
}
return sum;
}
然后可以在第一行和最后一行添加元素,如
int sum = sumArray(in[0]) + sumArray(in[in.length - 1]);
然后使用额外的(非嵌套的)循环(如
)从其他行中取出外部元素for (int i = 1; i < in.length - 1; i++) {
sum += in[i][0] + in[i][in[i].length - 1];
}
或,在Java 8+中,您可以消除额外的方法和显式循环,并使用像
这样的语句来完成。int sum = IntStream.of(in[0]).sum() //
+ IntStream.of(in[in.length - 1]).sum() //
+ IntStream.range(1, in.length - 1).map(i -> {
return in[i][0] + in[i][in[i].length - 1];
}).sum();
是的,你可以做得更有效率。
int row = in.length;
int column = in[0].length;//not sure of this syntax but trying to get the column size
int sum = 0;
for(int j=0;j<column;j++)
{
sum+=in[0][j]+in[row-1][j];
}
for(int j=1;j<row-1;j++)
{
sum+=in[j][0]+in[j][column-1];
}
您的解决方案是O(mn),循环遍历不必要的索引。