网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
示例 2:
输入:matrix = [["0","1"],["1","0"]]
输出:1
示例 3:
输入:matrix = [["0"]]
输出:0
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 300
matrix[i][j]
为'0'
或'1'
2、思路
(动态规划)
O
(
n
m
)
O(nm)
O(nm)
状态表示: f[i][j]
表示所有以(i,j)
为右下角的且只包含1
的正方形的边长最大值。
状态计算:
对于每个位置 (i, j)
,检查在矩阵中该位置的值:
- 如果该位置的值是
0
,则f[i, j] = 0
,因为当前位置不可能在由1
组成的正方形中。 - 如果该位置的值是
1
,则f[i, j]
的值由其上方、左方和左上方的三个相邻位置的状态值决定。具体而言,当前位置的元素值等于三个相邻位置的元素中的最小值加1
。
状态转移方程: f[i,j]=min(f[i−1,j−1],f[i−1,j],f[i,j−1])+1
类似于 木桶的短板理论, 附近的最小边长,才与(i,j)
的最长边长有关。
时间复杂度分析:
O
(
n
m
)
O(nm)
O(nm),其中
n
n
n和
m
m
m是矩阵的行数和列数。
3、c++代码
![img](https://img-blog.csdnimg.cn/img_convert/36375c254de07a25fbdfbacf7a3854b7.png)
![img](https://img-blog.csdnimg.cn/img_convert/c9f734a7f10ceb59b3c33e57e1370069.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**