如何在此dfs最大区域大小解决方案中删除全局变量?

我刚刚完成了一个简单的HackerRank question,该问题本质上是要求在0和1的2D矩阵中找到最大的区域,其中一个区域定义为上下左右各1个邻居的集合,对角线和对角线我创建了一个dfs方法,最初考虑将区域的大小作为参数,并在每次调用该方法时检查该大小是否超过最大大小。这不仅是不必要的额外指令,而且根本不起作用(例如,如果当前大小为5,并且调用了2个邻居,则大小将更新为6,而不是7)。我觉得在这里拥有全局变量只是解决问题的最简单方法,但是我知道在面试中可能不会很好地接受到这一点。我将如何有效地返回dfs方法的int返回类型?

private static int currSize;
private static int maxSize;

static void dfs(int i,int j,int[][] grid) {
    currSize++;
    grid[i][j] = 0;

    for (int row = i - 1; row <= i + 1; row++)
        for (int col = j - 1; col <= j + 1; col++)
            if (inBounds(row,col,grid) && grid[row][col] == 1)
                dfs(row,grid);
}


static boolean inBounds(int i,int[][] grid) {
    return (i >= 0 && i < grid.length) && (j >= 0 && j < grid[0].length);
}

// Complete the maxRegion function below.
static int maxRegion(int[][] grid) {
    for (int i = 0; i < grid.length; i++)
        for (int j = 0; j < grid[0].length; j++)
            if (grid[i][j] == 1) {
                currSize = 0;
                dfs(i,j,grid);
                maxSize = Math.max(maxSize,currSize);
            }

    return maxSize;
}

更新:我刚刚使这个BFS实现与队列一起工作(我也消除了多余地添加顶点)。这也很好,因为它是递归的,而不是递归的解决方案,但是它仍然不能解决在全局变量中使用dfs的问题,因此仍然可以提供任何帮助!

    static int maxRegion(int[][] grid) {
    int maxSize = Integer.MIN_VALUE;

    for (int i = 0; i < grid.length; i++)
        for (int j = 0; j < grid[i].length; j++)
            // discovered a new region
            if (grid[i][j] == 1) {
                Queue<Integer> vertices = new LinkedList<>();
                grid[i][j] = 0;
                vertices.add(toMatrix(i,grid));
                int currSize = 0;

                while (!vertices.isEmpty()) {
                    int v = vertices.remove();
                    int r = v / grid[0].length;
                    int c = v % grid[0].length;
                    currSize++;

                    for (int row = r - 1; row <= r + 1; row++)
                        for (int col = c - 1; col <= c + 1; col++)
                            if (inBounds(row,grid) && grid[row][col] == 1) {
                                grid[row][col] = 0;

                                vertices.add(toMatrix(row,grid));
                            }
                }

                maxSize = Math.max(maxSize,currSize);
            }

    return maxSize;
}
levisor 回答:如何在此dfs最大区域大小解决方案中删除全局变量?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2863991.html

大家都在问