leetcode--85. Maximal Rectangle
来源:互联网 发布:企业网络拓扑图配置 编辑:程序博客网 时间:2024/06/12 22:24
85. Maximal Rectangle
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle 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 6.
/*
给定一个矩阵中,只有0和1,求出这个矩阵的一个最大的子矩阵,其中只包含1.例如:
01101
11010
01110
11110 -->行
11111
00000
其实这个问题可以转化为Largest Rectangle in Histogram,先将上面的矩阵转化为:
行 列:
01101 01201
12010 12010
03110 01230
14210 12340
25321 12345
00000 00000
然后对每一列求直方图的最大面积。
题解:
这道题可以应用之前解过的Largetst Rectangle in Histogram一题辅助解决。
解决方法是:按照每一行计算列中有1的个数,作为高度,当遇见0时,这一列高度就为0。
然后对每一行计算 Largetst Rectangle in Histogram,最后得到的就是结果。
*/
public class Solution {
public int maximalRectangle(char[][] matrix) {
if(matrix==null || matrix.length==0 || matrix[0].length==0)
return 0;
int m = matrix.length;
int n = matrix[0].length;
int max = 0;
int[] height = new int[n];//对每一列构造数组
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(matrix[i][j] == '0')//如果遇见0,这一列的高度就为0了
height[j] = 0;
else
height[j] += 1;
}
max = Math.max(largestRectangleArea(height),max);
}
return max;
}
public int largestRectangleArea(int[] height) {
Stack<Integer> stack = new Stack<Integer>();
int i = 0;
int maxArea = 0;
// int[] h = new int[height.length + 1];
//h = Arrays.copyOf(height, height.length + 1);//方法复制指定的数组,截取或用null填充(如有必要),以使副本具有指定的长度
int n = height.length; //height -- 这是要被复制的数组;heigh.tlength+1这是要返回的副本长度
while(i <= n){
int temp = (i == n ? 0 : height[i]);
if(stack.isEmpty() || height[stack.peek()] <= temp){
stack.push(i);
i++;
}else {
int t = stack.pop();
int square = -1;
if(stack.isEmpty())
square = height[t]*i;
else{
int x = i-stack.peek()-1;
square = height[t]*x;
}
maxArea = Math.max(maxArea, square);
}
}
return maxArea;
}
}
- LeetCode 85. Maximal Rectangle
- [Leetcode] 85. Maximal Rectangle
- LeetCode --- 85. Maximal Rectangle
- [LeetCode]*85.Maximal Rectangle
- [leetcode] 85.Maximal Rectangle
- Leetcode 85. Maximal Rectangle
- leetcode 85. Maximal Rectangle
- LeetCode 85. Maximal Rectangle
- Leetcode 85. Maximal Rectangle
- Leetcode:85. Maximal Rectangle
- LeetCode 85. Maximal Rectangle
- LeetCode-85.Maximal Rectangle
- leetcode.85. Maximal Rectangle
- leetcode 85. Maximal Rectangle
- Leetcode 85. Maximal Rectangle
- [LeetCode] 85. Maximal Rectangle
- leetcode 85.Maximal Rectangle
- leetcode:85. Maximal Rectangle
- 利用百度云盘建立svn或者git服务器的办法
- php记要(保证else与if的关闭花括号处于同一php标签内)
- CentOS6.5文件系统目录结构介绍
- redis数据类型详解
- 关于新浪sae个人博客的搭建教程
- leetcode--85. Maximal Rectangle
- 需求分析
- Eclipse安装Activiti Designer插件
- 【jzoj4933】【线段树】
- 如何让桌面文件不保存在C盘
- redis 数据持久化
- nachos操作系统pro1测试方法
- 从零开始打造自己的框架 - 入口文件
- 群论及Polya计数定理题目入门