在这个二维数组中找到最大的区域
Posted
技术标签:
【中文标题】在这个二维数组中找到最大的区域【英文标题】:find the largest area in this 2d array 【发布时间】:2019-11-09 00:13:44 【问题描述】:我需要帮助
您又是 WeWork 等共享办公空间的所有者,而您的办公楼是矩形的。您的团队刚刚创建了许多墙隔板来为初创公司创建迷你办公室。您的办公园区由 1(地面空间)和 0(墙壁)组成的二维数组表示。该阵列上的每个点都是一英尺乘一英尺的正方形。在租给租户之前,您想为自己预订一个办公室。您希望在您的办公室中放置尽可能大的矩形桌子,您将选择适合该桌子的办公室。桌边将始终与办公楼的边界平行。您办公室最大的桌子面积是多少?
函数 largeTable() 有一个参数:
grid:由 1 和 0 组成的 2D 网格/数组
输入格式 对于我们的一些模板,我们已经为您处理了解析。如果我们没有为您提供解析功能,您将需要直接解析输入。在这个问题中,我们的输入格式如下:
第一行是二维数组的行数 第二行是二维数组的列数 输入的其余部分包含要处理的数据 以下是原始输入的示例:
4
5
11110
11010
11000
00000
预期输出 返回网格中由 1 组成的最大区域的面积。假设网格被 0(墙)包围。
约束 假设数组的边界如下: 数组中元素的总数:width x height
示例 示例 largeTable() 输入
grid:
[[1, 0, 1, 1, 1],
[1, 0, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 0, 0, 1, 0]]
示例输出
9
解决方案
网格的右上角由一个矩形组成,其中包含九个 1,这是我们桌子可能的最大空间。
【问题讨论】:
希望,它来自developers.turing.com/dashboard/takechallenge 【参考方案1】:这个问题可以用一种合乎逻辑的方式来解决,你循环遍历建筑物并检查可以放置桌子的潜在空间,然后只返回找到的最大桌子:
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;
【讨论】:
以上是关于在这个二维数组中找到最大的区域的主要内容,如果未能解决你的问题,请参考以下文章