221. Maximal Square
来源:互联网 发布:宝宝学画画软件 编辑:程序博客网 时间:2024/05/24 15:41
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 01 0 1 1 11 1 1 1 11 0 0 1 0Return 4.
思路,遍历每一个1,然后向右向下扩展,看看能否构成正方形
public class MaximalSquare { // 判断是否是正方形 public boolean ifSquare(int i, int j, int k, char[][] matrix) { for(int a = j; a <= j + k; a++) { if(matrix[i+k][a] != '1') return false; } for(int a = i; a <= i + k; a++) { if(matrix[a][j+k] != '1') return false; } return true; } // 计算正方形的最大面积 public int getArea(int i, int j, char[][] matrix) { int k = 1; while((i + k < matrix.length) && (j + k < matrix[0].length) && ifSquare(i, j, k, matrix)) { k++; } return k * k; } public int maximalSquare(char[][] matrix) { int area = 0; if(matrix[0].length == 0) return area; int minLength = Math.min(matrix.length, matrix[0].length); int maxArea = minLength * minLength; for(int i = 0; i < matrix.length - 1; i++) { for(int j = 0; j < matrix[0].length - 1; j++) { if(matrix[i][j] == '1') { area = Math.max(area, getArea(i, j, matrix)); if(area == maxArea) return area; } } } if(area == 0) { for(int i = 0; i < matrix[0].length; i++) { if(matrix[matrix.length-1][i] == '1') return 1; } for(int i = 0; i < matrix.length; i++) { if(matrix[i][matrix[0].length-1] == '1') return 1; } } return area; } public static void main(String[] args) { // TODO Auto-generated method stub MaximalSquare ms = new MaximalSquare(); char[][] matrix = { {'1','0','1','0','0'}, {'1','0','0','1','1'}, {'1','1','0','1','1'}, {'1','0','1','1','1'} }; int area = ms.maximalSquare(matrix); System.out.println(area); }}
然后看了讨论区,好吧我SB,大神们用的DP,几行搞定
public int maximalSquareDp(char[][] matrix) { if(matrix.length == 0 || matrix[0].length == 0) return 0; int[][] dp = new int[matrix.length + 1][matrix[0].length + 1]; int max = 0; for(int i = 1; i <= matrix.length; i++) { for(int j = 1; j <= matrix[0].length; j++) { if(matrix[i-1][j-1] == '1') { dp[i][j] = Math.min(dp[i-1][j-1], Math.min(dp[i-1][j], dp[i][j-1])) + 1; max = Math.max(max, dp[i][j]); } } } return max * max; }
不过程序运行时间,就有点。。。
阅读全文
0 0
- 221.Maximal Square
- [leetcode] 221.Maximal Square
- 【leetcode】221. Maximal Square
- [LeetCode]221. Maximal Square
- leetcode 221. Maximal Square
- 221. Maximal Square LeetCode
- 221. Maximal Square
- 221. Maximal Square
- LeetCode 221. Maximal Square
- 221. Maximal Square
- LeetCode *** 221. Maximal Square
- 221. Maximal Square
- LeetCode-221.Maximal Square
- leetcode.221. Maximal Square
- 221. Maximal Square
- Leetcode 221. Maximal Square
- 221. Maximal Square
- 221. Maximal Square
- MVP基类
- 霍尔元件 开关检测电路
- BUG:记MediaBrowserService的onLoadChildren不执行
- thinkphp 缓存数据 S方法
- JS进行人民币大小写转换
- 221. Maximal Square
- find指令常用的命令
- 小小上拉加载更多的DEMO——桃先森_
- (转)Java反射机制应用实践
- 用IntelliJ IDEA 永久显示行号
- 深入浅出聊Unity3D项目优化:从Draw Calls到GC
- C语言基础系列- %占位符知识04
- 学习笔记TF012:卷积网络简述
- SpringMVC+FastJson+hibernate-validator整合完整示例