Java - 如何解决这个二维数组沙漏?

标签 java arrays multidimensional-array

我正在解决一个问题,我必须打印数组中所有沙漏中最大的总和。您可以找到有关问题的详细信息 here-

我尝试了什么:

public class Solution {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int arr[][] = new int[6][6];
        for (int arr_i = 0; arr_i < 6; arr_i++) {
            for (int arr_j = 0; arr_j < 6; arr_j++) {
                arr[arr_i][arr_j] = in.nextInt();
            }
        }

        int sum = 0;
        int tmp_sum = 0;
        for (int arr_i = 0; arr_i < 4; arr_i++) {
            for (int arr_j = 0; arr_j < 4; arr_j++) {
                if (arr[arr_i][arr_j] > 0) {
                    sum = sum + (arr[arr_i][arr_j]) + (arr[arr_i][arr_j + 1]) + (arr[arr_i][arr_j + 2]);
                    sum = sum + (arr[arr_i + 1][arr_j + 1]);
                    sum = sum + (arr[arr_i + 2][arr_j]) + (arr[arr_i + 2][arr_j + 1]) + (arr[arr_i + 2][arr_j + 2]);
                    if (tmp_sum < sum) {
                        tmp_sum = sum;
                    }
                    sum = 0;
                }
            }
        }
        System.out.println(tmp_sum);
    }
}

输入:

1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 9 2 -4 -4 0
0 0 0 -2 0 0
0 0 -1 -2 -4 0

输出:

12

预期输出:

13

截图: enter image description here

我不知道我哪里做错了。我不明白为什么预期输出是 13。根据题中给出的描述,应该是10。这是一个错误的问题还是我对此的理解有误?

最佳答案

删除 if (arr[arr_i][arr_j] > 0) 语句。它会阻止在第 1 行第 0 列找到答案,因为该单元格是 0

对您代码的其他改进的评论:

  • 如果最好的沙漏总和是 -4 怎么办?您应该将 tmp_sum 初始化为 Integer.MIN_VALUE。并将其命名为 maxSum,以更好地描述其用途。

  • 您不应该在循环外定义sum。在第一次分配时声明它,然后您不必在之后将其重置为 0

  • 您的迭代器应该只是ij。这些是整数迭代器的标准名称,并使代码……更简洁。
    如果您喜欢更长的名称,请使用 rowcol,因为这就是它们所代表的内容。

  • 您不需要在数组查找周围加上括号。

  • 为清楚起见,我对下面的代码进行了格式化,以在数组查找中显示沙漏形状。

Scanner in = new Scanner(System.in);
int arr[][] = new int[6][6];
for (int i = 0; i < 6; i++){
    for (int j = 0; j < 6; j++){
        arr[i][j] = in.nextInt();
    }
}

int maxSum = Integer.MIN_VALUE;
for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
        int sum = arr[i    ][j] + arr[i    ][j + 1] + arr[i    ][j + 2]
                                + arr[i + 1][j + 1]
                + arr[i + 2][j] + arr[i + 2][j + 1] + arr[i + 2][j + 2];
        if (maxSum < sum) {
            maxSum = sum;
        }
    }
}
System.out.println(maxSum);

关于Java - 如何解决这个二维数组沙漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37363674/

相关文章:

c - C 中的 Tic Tac Toe AI 问题

java - @initbinder 不适用于特定模型属性

java - 如何使用java api像jdbc一样直接发送hbase shell命令?

C语言编程指针指向多维表

java - 在java中连接两个列表,不带null

c++ - 如何编写此西北方法的代码

java - 二维字符数组递归搜索最大组

java - Android - 如何从 url 读取文本文件?

java 插件在 Android Studio 项目中工作,但在 Unity 中不起作用

php - Android 从数据库获取数据不起作用(php + json + mysql)