美文网首页
0 1矩阵求只包含1的最大矩形

0 1矩阵求只包含1的最大矩形

作者: futurehau | 来源:发表于2016-08-14 19:25 被阅读1202次

题目:

给定一个无序矩阵,只包含0 和1 两种元素,求只包含1的最大子矩阵的大小。
[leetcode85]https://leetcode.com/problems/maximal-rectangle/

思路:

有了求解直方图最大矩形的[算法原型]http://www.jianshu.com/p/b871972747c0 之后,这个问题就方便许多。
可以考虑必须以某一行为底的最大1子矩阵,这样所有行为底的最大即为所求。

算法步骤

注意以求解某行为底怎么求。用一个数组h来作为辅助数组.h[i]为这行的第i列往上有多少个连续的1,如果这行的i位置为0,则h[i]=0,否则h[i]=h[i]+1。

public class Solution {
    public int maximalRectangle(char[][] matrix) {
        if(matrix==null||matrix.length==0||matrix[0].length==0)
            return 0;
        int res=0;
        int[] h=new int[matrix[0].length];
        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix[0].length;j++){
                h[j]=matrix[i][j]=='0'?0:h[j]+1;
            }
            res=Math.max(res,largestRectangleArea(h));
        }
        return res;
    }
     public int largestRectangleArea(int[] heights) {
        if(heights==null||heights.length==0)
            return 0;
        int res=0;
        Stack<Integer> stack=new Stack<Integer>();
        for(int i=0;i<heights.length;i++){
            while(!stack.isEmpty()&&heights[i]<=heights[stack.peek()]){
                int cur=stack.pop();
                int left=stack.isEmpty()?-1:stack.peek();
                res=Math.max(res,(i-left-1)*heights[cur]);
            }
            stack.push(i);
        }
        while(!stack.isEmpty()){
            int cur=stack.pop();
            int left=stack.isEmpty()?-1:stack.peek();
            res=Math.max(res,(heights.length-left-1)*heights[cur]);
        }
        return res;
    }
}

相关文章

  • 0 1矩阵求只包含1的最大矩形

    题目: 给定一个无序矩阵,只包含0 和1 两种元素,求只包含1的最大子矩阵的大小。[leetcode85]http...

  • JavaScript 算法 (最大矩形)

    最大矩形 题目:给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例: ...

  • 直方图最大面积矩形&01矩阵中最大的全0(1)矩阵

    求直方图中最大矩形的面积,用这个思路可以进一步解决求01矩阵中最大的全0或全1矩阵 直方图中最大矩形的面积 问题描...

  • leetcode85 最大矩形

    题目 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例: 输入:[[...

  • 85最大面积

    题目描述 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例: 输入:...

  • 栈-最大矩形(85)

    给定一个仅包含0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其...

  • 面积最大的矩形

    题目描述:给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例:输入:[...

  • 5454. 统计全 1 子矩形

    题目 5454. 统计全 1 子矩形 给你一个只包含 0 和 1 的 rows * columns 矩阵 mat ...

  • 85. 最大矩形

    给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 思路: 每一行计算高度,...

  • LeetCode 力扣 85. 最大矩形

    题目描述(困难难度) 给一个只有 0 和 1 的矩阵,输出一个最大的矩形的面积,这个矩形里边只含有 1。 解法一 ...

网友评论

      本文标题:0 1矩阵求只包含1的最大矩形

      本文链接:https://www.haomeiwen.com/subject/dwgysttx.html