zoukankan      html  css  js  c++  java
  • leetcode 221 最大正方形

    题目描述: 

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

    题解:

      考虑动态规划。用$dp(i,j)$表示以$(i,j)$为右下角,且只包含1的正方形的边长的最大值。状态可以参考(leetcode 1277),如下:

    • 如果当前位置为0,$dp(i,j) = 0$
    • 如果当前位置为1,当前状态由其左方、上方、左上方共同决定:$dp(i,j) = min(dp(i,j-1) , dp(i-1,j),dp(i-1,j-1)) + 1$

      下图给出了dp的计算过程:

      

    AC代码如下:

      

    class Solution {
    public:
        int maximalSquare(vector<vector<char>>& matrix) {
            if (matrix.size() == 0 || matrix[0].size() == 0) {
                return 0;
            }
            int maxSide = 0;
            int rows = matrix.size(), columns = matrix[0].size();
            vector<vector<int>> dp(rows, vector<int>(columns));
            for (int i = 0; i < rows; i++) {
                for (int j = 0; j < columns; j++) {
                    if (matrix[i][j] == '1') {
                        if (i == 0 || j == 0) {
                            dp[i][j] = 1;
                        } else {
                            dp[i][j] = min(min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
                        }
                        maxSide = max(maxSide, dp[i][j]);
                    }
                }
            }
            int maxSquare = maxSide * maxSide;
            return maxSquare;
        }
    };
  • 相关阅读:
    修改NavigationBarItem的字体大小和颜色的使用方法
    iOS 大文件断点下载
    iOS 文件下载
    UITableView优化
    iOS 应用的生命周期
    iOS RunLoop简介
    iOS 线程间的通信 (GCD)
    iOS 多线程GCD的基本使用
    iOS 多线程GCD简介
    CSS--复习之旅(一)
  • 原文地址:https://www.cnblogs.com/z1141000271/p/12849413.html
Copyright © 2011-2022 走看看