leetcode 85. Maximal Rectangle
2016-06-03 17:57
471 查看
public int maximalRectangle(char[][] matrix) { if(matrix == null || matrix.length==0|| matrix[0].length==0) return 0;//记住逻辑或和逻辑与有短路的,要先判断if条件的优先级 int n = matrix.length;//行数 int m = matrix[0].length;//列数 int maxA = 0; int[] heights = new int[m];//设置每一列的高度 for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(i==0){ heights[j] = matrix[0][j] - '0';//初始化,因为matrix为char型,要转换 }else if(matrix[i][j]=='1'){ heights[j] = heights[j] + 1; }else{ heights[j] = 0; } } maxA = Math.max(maxA,largestRectangleArea(heights));//逐行求出每一行的区域,取最大值 //if() } return maxA; }
或者为每一个矩阵元素设置一个高度值,然后计算改行不同高度值之间最大矩形区域(因为上一题每个直方图的宽度为1,正好符合列索引间的大小关系,故可将上一题求一位数组高度
的算法,放到这道题中,将矩阵分解为求每一行的一位数组高度的最大矩形区域,并逐行求最值
<pre name="code" class="java"> public int maximalRectangle(char[][] matrix) { if(matrix == null || matrix.length==0|| matrix[0].length==0) return 0;//记住逻辑或和逻辑与有短路的,要先判断if条件的优先级 int n = matrix.length;//行数 int m = matrix[0].length;//列数 int maxA = 0; int[][] heights = new int [m]; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(i==0){ heights[0][j] = matrix[0][j] - '0';//初始化,因为matrix为char型,要转换,所以用字符‘0’ }else if(matrix[i][j]=='1'){ heights[i][j] = heights[i-1][j] + 1; }else{ heights[i][j] = 0; } } maxA = Math.max(maxA,largestRectangleArea(heights[i])); } return maxA; }
相关文章推荐
- Hadoop YARN中内存和CPU两种资源的调度和隔离
- 嵌入式Linux ARM汇编(三)——ARM汇编指令(二)
- 动态从excel取出数据,并封装动态javabean存入数据库
- Android 5.0状态栏通知图标的实现
- 字符设备框架(ioctrl)
- PHP定时执行
- java静态程序块、普通程序块、构造函数
- mini-buttonedit 镜像库选择相应软件的弹框 漏洞防护选择相应漏洞的弹框
- 配置web工程的过程
- 非常好用的产品橱窗滑动js
- 购书打折
- CentOS下安装UNRAR
- django Error: [Errno 10013]怎么办
- HDU 1711 Number Sequence
- 自动备份MYSQL数据库删除五天前的旧档和上传到其他服务器
- Email之父去世:因他邮箱才有了@
- MongoVUE 1.6.9破解方法
- 60多年前,一群小白程序员扒了一个俄罗斯的开源框架
- 左图右文或者上图下文的排列
- Ubuntu配置samba实现文件夹共享