javascript - 在这个二维数组中找到最大的区域

标签 javascript arrays 2d

我需要帮助

您再次成为 WeWork 等共享办公空间的所有者,您的办公楼是矩形的。您的团队刚刚创建了许多墙隔板来为初创公司创建迷你办公室。您的办公园区由 1(地面空间)和 0(墙壁)组成的二维数组表示。该阵列上的每个点都是一英尺乘一英尺的正方形。在租给租户之前,您想为自己预订一个办公室。您希望在您的办公室中放置尽可能大的矩形 table ,您将选择适合该 table 的办公室。 table 边将始终与办公楼的边界平行。你办公室最大的 table 面积是多少?

功能
maximumTable() 有一个参数:

网格:1 和 0 的 2D 网格/数组

输入格式
对于我们的一些模板,我们已经为您处理了解析。如果我们没有为您提供解析功能,您将需要直接解析输入。在这个问题中,我们的输入格式如下:

第一行是二维数组的行数
第二行是二维数组的列数
输入的其余部分包含要处理的数据
以下是原始输入的示例:

4
5
11110
11010
11000
00000

预期产出
返回网格中由 1 组成的最大区域的面积。假设网格被 0(墙)包围。

约束
假设数组的边界如下:
数组中元素的总数:width x height <= 10^6

例子
示例最大表()输入
grid: 
    [[1, 0, 1, 1, 1],
     [1, 0, 1, 1, 1],
     [1, 1, 1, 1, 1],
     [1, 0, 0, 1, 0]]

示例输出
9

解决方案

网格的右上角由一个包含九个 1 的矩形组成,这是我们 table 的最大空间。

最佳答案

这个问题可以用一种合乎逻辑的方式来解决,你遍历建筑物并检查可以放置 table 的潜在空间,然后只返回找到的最大 table :

function biggestTable(grid) {
    const tableExist = (x, y, w, h) => {
        let exist = 1;
        for(let i = 0; i < w ; i++) {
            for(let j = 0; j < h ; j++) {
                exist &= grid[j + y] !== undefined && grid[j + y][i + x] == 1;
            }
        }
        return exist;
    };

    const biggestTableAt = (x, y) => {
        let max = 0;
        for(let w = 1; w <= grid[0].length; w++) {
            for(let h = 1; h <= grid.length; h++) {
                const table_size = w * h;
                if (tableExist(x, y, w, h) && table_size>max) {
                    max = table_size;
                }
            }
        }
        return max;
    };

    let max = 0;
    for(let x = 0; x < grid[0].length; x++) {
        for(let y= 0; y < grid.length; y++) {
            const table_size = biggestTableAt(x, y);
            if (table_size > max) {
                max = table_size;
            }
        }
    }
    return max;
}

关于javascript - 在这个二维数组中找到最大的区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58775224/

相关文章:

javascript - Vue双向数据绑定(bind)问题

javascript - 在Javascript单例中用数组成员初始化对象成员的属性

javascript - 为什么我必须制作一个单独的变量来纠正这个循环? (JavaScript 基础知识)

android - 在 Android 游戏中为边界定义一个圆形区域

arrays - swift 中的 2D 空数组( String 和 Bool )

用于图形可视化的 Android 2D 框架

javascript - 如何创建一个平滑的动画来缓和目标

javascript - 如何使用 javascript jquery 将具有多个 id 的数组制作为视频标签

javascript - 闰年功能;这个解决方案如何运作?

javascript - 重写展平函数