用Java算法在1和0的矩阵中找到最大尺寸的平方

时间:2019-11-29 17:07:36

标签: javascript arrays algorithm

您是WeWork等共享办公空间的所有者,而您的办公大楼为矩形。您的团队刚刚创建了许多墙分区,为初创企业创建了迷你办公室。您的办公室园区由1s(地面空间)和0s(墙壁)的2D数组表示。此数组上的每个点都是一英尺乘一英尺的正方形。在租给租户之前,您想为自己保留一个办公室。您希望适合办公室中最大的矩形桌子,然后选择适合该桌子的办公室。桌子的侧面将始终平行于办公大楼的边界。可容纳您办公室的最大桌子的面积是多少?

功能 maximumTable()有一个参数:

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

输入格式 对于某些模板,我们已经为您处理了解析。如果我们不为您提供解析功能,则需要直接解析输入。在此问题中,我们的输入格式如下:

第一行是2D数组中的行数 第二行是2D数组中的列数 输入的其余部分包含要处理的数据 这是原始输入的示例:

4
5
11110
11010
11000
00000

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

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

示例

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("");
}

有人可以提供解决方案吗?

1 个答案:

答案 0 :(得分:0)

可以通过逻辑方式来解决此问题,即您遍历建筑物并检查可以放置的潜在空间,然后只需返回找到的最大表

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