LeetCode 221. 最大正方形
题目描述
在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。
原题连接
链接:https://leetcode-cn.com/problems/maximal-square/
输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:4
一、基础框架
二、解题报告
1.思路分析
1、一开始是比较懵逼的,需要谨慎思考
2、注意条件 数组含有 1 和0。只处理关于1的数据
3、需要求最优解 联想到贪心和动态规划
4、二维数组 果断动态规划
双层循环 找到等于1的元素记录边长;
2.时间复杂度
3.代码示例
tips:
class Solution {
public int maximalSquare(char[][] matrix) {
int row = matrix.length;
int col = matrix[0].length;
//终止程序
if(matrix == null || row < 1 || col < 1){
return 0;
}
int maxSize = 0;
int [][] dp = new int[row + 1][col + 1];
for(int i = 0 ; i < row;i ++ ){
for(int j = 0; j < col ; j ++){
if(matrix[i][j] == '1'){
dp[i + 1][j + 1] = Math.min(Math.min(dp[i + 1][j],dp[i][j + 1]),dp[i][j]) + 1;
maxSize = Math.max(maxSize,dp[i + 1][j + 1]);
}
}
}
return maxSize * maxSize;
}
}
2.知识点
1、动态规划解法
总结
动态规划一般步骤
1、找到dp方程容量
2、初始化dp方程
3、dp方程默认值
4、遍历当前数组 & 处理符合条件的数据
5、处理dp方程
6、找到最优解 返回