【问题标题】:Javascript Algorithm to find maximum size square in matrix of 1's and 0's [closed]Javascript算法在1和0的矩阵中找到最大尺寸的正方形[关闭]
【发布时间】:2019-11-29 17:07:36
【问题描述】:

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

函数 largeTable() 有一个参数:

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

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

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

4
5
11110
11010
11000
00000

预期输出 返回网格中由 1 组成的最大直角平行四边形的面积。假设网格被 0(墙)包围。

约束 假设数组的边界如下: 数组中元素的总数:width x height

例子

Example biggestTable() Input

grid: 
    [[1, 0, 1, 1, 1],
     [1, 0, 1, 1, 1],
     [1, 1, 1, 1, 1],
     [1, 0, 0, 1, 0]]
Example Output

9


/**
 * @param {character[][]} grid
 * @return {number}
 */
var biggestTable = function(grid) {
    // your code here

    return 0;
};

let height = parseInt(readline());
let width =  parseInt(readline());
let grid = [];
for (var i = 0; i < height; i++) {
    grid[i] = (readline() || "").split("");
}

请有人帮忙解决一下。

【问题讨论】:

    标签: javascript arrays algorithm


    【解决方案1】:

    这个问题可以用一种合乎逻辑的方式来解决,你循环遍历 building 并检查可以放置 tables 的潜在 space,然后返回 找到的最大表

    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;
    }
    
    
    const simple_grid = [
        [1, 0, 1, 1, 1],
        [1, 0, 1, 1, 1],
        [1, 1, 1, 1, 1],
        [1, 0, 0, 1, 0]
    ];
    console.log(biggestTable(simple_grid)); //returns 9
    const big_grid = [
        [1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1],
        [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1],
        [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1],
        [1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1],
    ];
    console.log(biggestTable(big_grid)); // returns 18
    

    接受的响应对两个网格都返回 9,因为它假定表格是 square 而不是问题中要求的 rectangular

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 2011-04-17
      • 2016-04-20
      相关资源
      最近更新 更多