在Java中对二维整数数组的外部元素求和



我考试中的一个问题要求写一些代码来计算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),循环遍历不必要的索引。

相关内容

  • 没有找到相关文章

最新更新