题目描述
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
示例:
输入:
1 0 1 0 0
1 0 1 1
1
1 1 1 1
1
1 0 0 1 0
输出: 4
问题求解
1.暴力求解法
源代码
复杂度分析
时间复杂度:O( (mn)^2 ),最坏情况下,我们需要遍历整个矩阵寻找每个 1。
空间复杂度:O(1),没有使用额外的空间。
2.动态规划(递推法)
我们用一个例子来解释这个方法:
origin matrix:
0 1 1 1 0
1 1 1 1 0
0 1 1 1 1
0 1 1 1 1
0 0 1 1 1
transfer matrix: f(i,j) 表示在 (0,0)->(i,j) 坐标范围内,由 1 组成的最大正方形的边长:
0 1 1 1 0
1 1 2 2 1
0 1 2 3 1
0 1 2 3 2
0 0 1 2 3
我们用 0 初始化另一个矩阵 f,维数和原始矩阵维数相同;
f(i,j)
: 表示的是由 1 组成的最大正方形的边长;
从 (0,0)开始,对原始矩阵中的每一个 1,我们将当前元素的值更新为:
f(i, j) = 1 + min(f(i−1, j), f(i−1, j−1), f(i, j−1))
用一个变量记录当前出现的最大边长,这样遍历一次,找到最大的正方形边长 maxLen,那么结果就是 maxLen^2.
源代码:
运行测试
LeetCode 221. Maximal Square
参考资料
题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/maximal-square
Kotlin 开发者社区
国内第一Kotlin 开发者社区公众号,主要分享、交流 Kotlin 编程语言、Spring Boot、Android、React.js/Node.js、函数式编程、编程思想等相关主题。
越是喧嚣的世界,越需要宁静的思考。
1人点赞
编程笔记