边界全部由1组成的最大正方形子网格问题详解
题目描述
给定一个由若干 0 和 1 组成的二维网格 grid
,请找出一个边界全部由 1 组成的最大正方形子网格,并返回该子网格中的元素数量(即正方形面积)。如果不存在这样的子网格,返回 0。
输入输出示例
示例 1:
输入:
grid = [
[1, 1, 1],
[1, 0, 1],
[1, 1, 1]
]
输出:9
解释:整个 3x3 的正方形边界均为1,面积为 3*3=9。
示例 2:
输入:
grid = [
[1, 1, 0, 0]
]
输出:1
解释:最大的满足条件的正方形为单个的1,面积为1。
解题分析
问题本质
我们需要找一个子网格,它是一个正方形,且正方形的四条边全部是 1。正方形内部的元素不做限制,只看边界。
例如,边长为 k
的正方形,边界上共有 4k - 4
个元素都必须是 1。
简单暴力法(不可行)
暴力解法可以枚举所有可能的子正方形,从大到小,依次判断四条边是否全部为1。
- 时间复杂度极高,约为 O(m×n×min(m,n))O(m \times n