我的考试中的一个问题要求编写一些代码来计算2D数组的外部int元素的总和。行长和列长度不一定相等。
[编辑]角落值不能多次添加。
我提出了这个代码并且它有效,但我想知道是否有更有效的方法来实现相同的结果。感谢。
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;
}
}
}
答案 0 :(得分:1)
如果我理解你的问题,那么你可以先提取一个方法来添加一个数组的元素,如
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();
答案 1 :(得分:1)
是的,你可以更有效地做到这一点。
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),循环遍历不必要的索引。