在这方面我需要帮助
您再次成为像WeWork这样的协同工作空间的所有者,并且您的办公大楼是矩形的。您的团队刚刚创建了许多墙分区,为初创公司创建了迷你办公室。您的办公园区由1(楼层空间)和0(墙)组成的二维数组表示。这个数组上的每个点都是一个1英尺乘以1英尺的正方形。在出租给租户之前,你需要为自己预留一间办公室。您希望在办公室中放置尽可能大的矩形桌子,然后选择适合此桌子的办公室。桌子的侧面将始终与办公大楼的边界平行。你的办公室能容纳的最大桌子的面积是多少?
函数biggestTable()有一个参数:
grid: 1和0的2D网格/数组
对于我们的一些模板的输入格式,我们已经为您处理了解析。如果我们不为您提供解析函数,您将需要直接解析输入。在这个问题中,我们的输入格式如下:
第一行是2D数组中的行数,第二行是2D数组中的列数,其余的输入包含要处理的数据。这里是原始输入的示例:
4
5
11110
11010
11000
00000
期望输出返回值网格中由1组成的最大区域的面积。假设栅格被0(墙)包围。
约束假设数组的边界如下:数组中元素的总数:宽度x高度<= 10^6
示例biggestTable()输入
grid:
[[1, 0, 1, 1, 1],
[1, 0, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 0, 0, 1, 0]]
输出示例
9
解决方案
网格的右上角由一个矩形组成,其中有9个1,这是我们的表格可能的最大空间。
发布于 2019-12-14 19:05:01
这个问题可以用一种逻辑的方式来解决,你循环遍历建筑物,检查可以放置表的潜在空间,然后只返回找到的最大的表:
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;
}
https://stackoverflow.com/questions/58775224
复制相似问题