221. Maximal Square
2016-06-22 11:11
113 查看
思路
初始化:
1.第一行第一列,初始化成和原grid一样的值。因为他们要么构成边长为1的square,要么就不能
2. 然后余下的各自,从下往上从左往右走,如果这个格子是0,肯定不仅构不成,而且终结了以前的sqaure就是0,
如果是1,值就是左侧、上方和斜对角值中最小的一个+1.
画个图理解,比如三个值,有任意一个为0的时候,都没办法画出更大的方形,最多是1.
X 口 口 X 口口
口 ? 口 ? X ?
哈哈超烂的图,但是说明三者只要有一个为0,那么右下角就肯对最多是1
如果三者都不为0的话,边长至少为1,也就是说 口口 这个形状至少连起来的,但是对于这个大小的,都只能由最小的那个决定了,可以画图多试试。挺明显了。
口X
初始化:
1.第一行第一列,初始化成和原grid一样的值。因为他们要么构成边长为1的square,要么就不能
2. 然后余下的各自,从下往上从左往右走,如果这个格子是0,肯定不仅构不成,而且终结了以前的sqaure就是0,
如果是1,值就是左侧、上方和斜对角值中最小的一个+1.
画个图理解,比如三个值,有任意一个为0的时候,都没办法画出更大的方形,最多是1.
X 口 口 X 口口
口 ? 口 ? X ?
哈哈超烂的图,但是说明三者只要有一个为0,那么右下角就肯对最多是1
如果三者都不为0的话,边长至少为1,也就是说 口口 这个形状至少连起来的,但是对于这个大小的,都只能由最小的那个决定了,可以画图多试试。挺明显了。
口X
public int maximalSquare(char[][] matrix) { if(matrix.length == 0 || matrix[0].length == 0) { return 0; } int row = matrix.length; int col = matrix[0].length; int max = 0; int[][] res = new int[row][col]; for(int i = 0; i < row; i++) { res[i][0] = (matrix[i][0] == '1')? 1:0; if(res[i][0] > 0) { max = 1; } } for(int i = 0; i< col; i++) { res[0][i] = (matrix[0][i] == '1')? 1:0; if(res[0][i] > 0) { max = 1; } } for(int i = 1; i < row; i++) { for(int j = 1; j < col; j++) { if(matrix[i][j] == '1') { res[i][j] = Math.min(Math.min(res[i-1][j], res[i-1][j-1]), res[i][j-1]) + 1; if(res[i][j] > max) { max = res[i][j]; } } } } return max * max; }
相关文章推荐
- 【linux】日志管理
- 软件工程学期总结
- 05:派
- 关于Subversion的命令运行
- java Metric度量代码
- 如何使用Retrofit写一个Android的REST客户端的小教程
- Ubuntu14-04 MySQL-5.6.21通用二进制安装
- vsftp 搭建及虚拟账号配置
- MySQL所有函数及操作符
- JAVA/Android位运算符——左移(<<)、右移(>>)、与(&)、非(~)、或(|)、异或(^) .
- log4j.properties 的使用详解
- Java中的反射机制——动态编程
- 华为机试---钓鱼比赛
- Hbuilder widget集成原生应用
- AC自动机精讲
- 【剑指offer】栈的压入、弹出序列
- jquery正则表达式验证手机号格式与Email
- G2P(单词到音素)的深度学习训练测试
- 创建文件目录
- this.button1.Click += new System.EventHandler(this.button1_Click);