前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【leetcode刷题】T163-最大正方形

【leetcode刷题】T163-最大正方形

作者头像
木又AI帮
发布2019-09-10 16:07:05
4460
发布2019-09-10 16:07:05
举报
文章被收录于专栏:木又AI帮木又AI帮

【题目】

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

代码语言:javascript
复制
示例:
输入: 
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
输出: 4

【思路】

这道题我想着用【数组中最大矩形】的思路来做,想复杂了……

我们首先遍历每一行,得到高度。使用一位数组:matrix[i][j] == '1'时,dp[j] = dp[j] + 1;否则dp[j] = 0.

用一个变量max_size存储当前最大边长,当每一行的高度数组中,连续大于max_size的元素个数大于max_size,那么max_size++。

最后返回max_size * max_size。

(真方法真机智~)

【代码】

python版本

代码语言:javascript
复制
class Solution(object):
    def maximalSquare(self, matrix):
        """
        :type matrix: List[List[str]]
        :rtype: int
        """
        if not matrix or not matrix[0]:
            return 0;
        dp = [0] * len(matrix[0])
        max_size = 0

        for i in range(len(matrix)):
            for j in range(len(matrix[0])):
                if matrix[i][j] == '1':
                    dp[j] += 1
                else:
                    dp[j] = 0

            # 统计dp数组中连续>max_size的元素个数
            count = 0
            for j in range(len(matrix[0])):
                if dp[j] > max_size:
                    count += 1
                    if count > max_size:
                        max_size = count;
                        break;
                else:
                    count = 0
        return max_size * max_size

C++版本

代码语言:javascript
复制
class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        if(matrix.size() == 0 || matrix[0].size() == 0)
            return 0;
        int max_size = 0;
        vector<int> dp(matrix[0].size(), 0);
        for(int i=0; i < matrix.size(); i++){
            int count = 0;
            for(int j=0; j < matrix[0].size(); j++){
                if(matrix[i][j] == '1')
                    dp[j]++;
                else
                    dp[j] = 0;
            }
            for(int j=0; j < matrix[0].size(); j++){
                // 是否height > max_size的个数 > max_size
                if(dp[j] > max_size){
                    count++;
                    if(count > max_size){
                        max_size = count;
                        break;
                    }
                }else
                    count = 0;
            }
        }
        return max_size * max_size;
    }
};
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木又AI帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档