LeetCode之最大正方形

1. 题目

在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。

示例:

输入: 
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

输出: 4

2. 代码

  • 函数
  1. vector<vector> dp(m+1, vector(n+1, 0)); 定义二维vector以及其初始化!!!
  2. 当测试用例是 [] 的时候,只有row的值, 没有col的值
  3. min 和 max只有两个参数,第三个参数如果有的话为operation。 所以我们采用的是
    min(dp[i-1][j], min(dp[i-1][j-1], dp[i][j-1])) 嵌套min
  • 核心思想
  1. 我们了解到最大的正方形应该是从
  2. DP[i][j]来记录以点i,j为右下角的全1矩阵的最大边长。 即DP[i][j]表示的是边长大小!!!
  3. dp[i][j] = min(dp[i-1][j], min(dp[i-1][j-1], dp[i][j-1])) + 1;
    在这里插入图片描述
class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        int m = matrix.size();
        if(m==0) return 0;       //防止测试用例是  [], 这个时候,只有所谓的行m, 不存在n。   
        int n = matrix[0].size();
        int maxSqr = 0;
        vector<vector<int>> dp(m+1, vector<int>(n+1, 0));
        for(int i=1; i<=m; i++) {     
            for(int j=1; j<=n; j++) {
                if(matrix[i-1][j-1] == '1') {     //只有当其左上角是1的时候才执行下面的操作
                    dp[i][j] = min(dp[i-1][j], min(dp[i-1][j-1], dp[i][j-1])) + 1;
                    maxSqr = max(dp[i][j], maxSqr);
                }
            }
        }
        return maxSqr * maxSqr;
    }
};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值