题目链接
英文链接:https://leetcode.com/problems/largest-1-bordered-square/
中文链接:https://leetcode-cn.com/problems/largest-1-bordered-square/
题目详述
给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。如果不存在,则返回 0。
示例 1:
1 | 输入:grid = [[1,1,1],[1,0,1],[1,1,1]] |
示例 2:
1 | 输入:grid = [[1,1,0,0]] |
提示:
1 <= grid.length <= 100
1 <= grid[0].length <= 100
grid[i][j] 为 0 或 1
题目详解
- 枚举每一个正方形。
- 第一层循环枚举正方形的长度
len
,第二三层循环正方形的左上角。 - 对于每个正方形,我们需要尽可能快地判断它是否满足条件,这就需要进行预处理。通过预处理,得到每个点向下有多少个连续的 1、向右有多少个连续的 1。通过左上角可以得到其他三个点,再结合预处理后的结果,可以在常数时间内判断此正方形是否满足条件。
- 时间复杂度为
O(m * n * min(m, n))
。
1 | public class LeetCode_01139 { |