博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最大正方形 · Maximal Square
阅读量:4965 次
发布时间:2019-06-12

本文共 1818 字,大约阅读时间需要 6 分钟。

[抄题]:

在一个二维01矩阵中找到全为1的最大正方形

1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0

返回 4

 [暴力解法]:

时间分析:

空间分析:i j 中保留一排,用指针数组来优化空间存储

[思维问题]:

[一句话思路]:

棋盘类dp也是用扩展,不过是从右下角开始扩展 最大扩展中的最小值,没见过

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. 第0列初始化完成时,j 从1 开始。第一次发现初始化会对后续计算结果产生影响
  2. 某点的最大扩展f是收到其右下角三个点的计算得出的最大扩展f共同制约的,要看图理解

[二刷]:

[三刷]:

[四刷]:

[五刷]:

  [五分钟肉眼debug的结果]:

[总结]:

i or j中的一个只有2种状态,所以可以mod2 

[复杂度]:Time complexity: O(n) Space complexity: O(1)

[英文数据结构或算法,为什么不用别的数据结构或算法]:

格子类dp 属于坐标型

[关键模板化代码]:

f[i % 2][0] = matrix[i][0];
只有状态数组f要mod2

[其他解法]:

[Follow Up]:

空间优化

[LC给出的题目变变变]:

85. Maximal Rectangle 还是dp但是图形分析更复杂

 [代码风格] :

public int maximalSquare(char[][] matrix) {        //state         //corner case        int n = matrix.length;        int m = matrix[0].length;        int[][] f = new int[2][m];        int ans = 0;        if (n == 0) {            return 0;        }        //initialize for i = 0, j >= 1        for (int i = 0; i < n; i++) {            if (matrix[i][0] == '1')            {f[i % 2][0] = 1;            ans = Math.max(f[i % 2][0], ans);}            for (int j = 1; j < m; j++) {                //if row is not 0                if (i > 0) {                    //if matrix[i][j] exists                    if (matrix[i][j] == '1') {                        //+1                        f[i % 2][j] = 1 + Math.min(f[(i - 1) % 2][j],Math.min(f[i % 2][j - 1], f[(i - 1) % 2][j - 1]));                    }                    else {                        f[i % 2][j] = 0;                    }                }else {                    //if row is 0                    if (matrix[i][0] == '1')                    f[i % 2][j] = 1;                }                ans = Math.max(f[i % 2][j], ans);            }        }        //result        return ans * ans;
View Code

 

转载于:https://www.cnblogs.com/immiao0319/p/8514698.html

你可能感兴趣的文章
综合练习:词频统计
查看>>
BZOJ1026: [SCOI2009]windy数
查看>>
样板操作数
查看>>
64位UBUNTU下安装adobe reader后无法启动
查看>>
组件:slot插槽
查看>>
走进C++程序世界------异常处理
查看>>
Nginx配置文件nginx.conf中文详解(转)
查看>>
POJ 1308 Is It A Tree?(并查集)
查看>>
N进制到M进制的转换问题
查看>>
利用sed把一行的文本文件改成每句一行
查看>>
Android应用开发:核心技术解析与最佳实践pdf
查看>>
python——爬虫
查看>>
孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库
查看>>
求一个字符串中最长回文子串的长度(承接上一个题目)
查看>>
简单权限管理系统原理浅析
查看>>
springIOC第一个课堂案例的实现
查看>>
求输入成绩的平均分
查看>>
php PDO (转载)
查看>>
wordpress自动截取文章摘要代码
查看>>
[置顶] 一名优秀的程序设计师是如何管理知识的?
查看>>