zoukankan      html  css  js  c++  java
  • 221. Maximal Square -- 矩阵中1组成的最大正方形

    Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.

    For example, given the following matrix:

    1 0 1 0 0
    1 0 1 1 1
    1 1 1 1 1
    1 0 0 1 0
    

    Return 4.

    class Solution {
    
    public:
    
        inline int min(int x, int y) {
    
            return x<y? x:y;
    
        }
    
        inline int min(int x, int y, int z) {
    
            return min(x, min(y, z));
    
        }
    
        int maximalSquare(vector<vector<char>>& matrix) {
    
            int row = matrix.size();
    
            if (row <=0) return 0;
    
            int col = matrix[0].size();
    
            
    
            int maxSize = 0;
    
            vector<vector<int>> dp(row, vector<int>(col));
    
            
    
            for (int i=0; i<matrix.size(); i++) {
    
                for (int j=0; j<matrix[i].size(); j++){
    
                    //convert the `char` to `int`
    
                    dp[i][j] = matrix[i][j] -'0';
    
                    //for the first row and first column, or matrix[i][j], dp[i][j] is ZERO
    
                    //so, it's done during the previous conversion
    
                    
    
                    // i>0 && j>0 && matrix[i][j]=='1'
    
                    if (i!=0 && j!=0 & dp[i][j]!=0){
    
                        dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1;
    
                    }
    
                    
    
                    //tracking the maxSize
    
                    if (dp[i][j] > maxSize ){
    
                        maxSize = dp[i][j];
    
                    }
    
                }
    
            }
    
            
    
            return maxSize*maxSize;
    
        }
    
    };


     *   1) P[0][j] = matrix[0][j] (topmost row);

     *   2) P[i][0] = matrix[i][0] (leftmost column);

     *   3) For i > 0 and j > 0:

     *       3.1) if matrix[i][j] = 0, P[i][j] = 0;

     *       3.2) if matrix[i][j] = 1, P[i][j] = min(P[i-1][j], P[i][j-1], P[i-1][j-1]) + 1.

  • 相关阅读:
    手势识别 ios
    无题
    核心动画笔记
    Quartz2D的学习2
    Quartz2D的学习1
    NSURLsessionTask
    NSURLSession
    POST请求的两种方式
    网络第一天
    NSThread
  • 原文地址:https://www.cnblogs.com/argenbarbie/p/5807133.html
Copyright © 2011-2022 走看看