输入项
板子:字母的2D容器(矩阵,列表列表等),例如:
["B", "C", "C", "C", "C", "B", "B", "C", "A", "A"],
["B", "A", "C", "B", "B", "A", "B", "B", "A", "A"],
["B", "C", "B", "C", "A", "A", "A", "B", "C", "B"],
["B", "B", "B", "A", "C", "B", "A", "C", "B", "A"],
["A", "A", "A", "C", "A", "C", "C", "B", "A", "C"],
["A", "B", "B", "A", "A", "C", "B", "C", "C", "C"],
["C", "B", "A", "A", "C", "B", "B", "C", "A", "A"]
如果选择列表列表,则可以假定所有子列表的长度都相同。
规则
- 要制作一个有效的矩形,您需要所有带有相同“字母”的矩形角。
- 例如,用 X波纹管看样品板。您可以在(1,0)上也可以在(4,0)上也可以在(1,3)和(4,3)上看到'X',那么矩形[1,0,4,3]表示从(1,0)至(4,3):
带 X的样品板:
["B", "X", "C", "C", "X", "B", "B", "C", "A", "A"],
["B", "A", "C", "B", "B", "A", "B", "B", "A", "A"],
["B", "C", "B", "C", "A", "A", "A", "B", "C", "B"],
["B", "X", "B", "A", "X", "B", "A", "C", "B", "A"],
["A", "A", "A", "C", "A", "C", "C", "B", "A", "C"],
["A", "B", "B", "A", "A", "C", "B", "C", "C", "C"],
["C", "B", "A", "A", "C", "B", "B", "C", "A", "A"]
- 目标是找到由(right-left + 1)*(bottom-top + 1)计算的矩形或面积最大的矩形之一
- 如果有多个具有相同最大面积的矩形,则输出任何一个。可选地,在字典上最小的(顶坐标,左坐标,右坐标,底坐标)。
- 矩形的边缘必须与板的边缘平行。
- 每个字母都是从A到Z的可打印ASCII字符(均包括在内)。
输出量
输出应为最大面积矩形角的左上和右下位置。对于第一个示例“木板”,大方块是黄色的方块:
答案应该是:
[1、1、8、4]
第二个示例测试用例
输入:
["C", "D", "D", "D", "A", "A"],
["B", "D", "C", "D", "A", "A"],
["B", "D", "D", "C", "A", "C"],
["B", "D", "B", "C", "A", "C"]
应该产生标识区域的六个坐标的这三个坐标列表之一:
[1、0、2、2]
[1、0、3、1]
[3、2、5、3]
这个问题发布在Stack Overflow上,标题为:如何在由四个相同的角形成的2D数组中找到最大的矩形?并使用此粗鲁的JS解决方案(我可以说“粗鲁”,因为这是我的代码;):
好的,这是我的第一篇文章,请对我宽容。我会更改您所说的所有内容以改善测验。
((left,top),(right,bottom))
应该很好。问题完全完善后,我删除了我的答案并再次回答。