leetcode || 85、Maximal Rectangle

problem:

Given a 2D binary matrix filled with 0‘s and 1‘s, find the largest rectangle containing all ones and return its area.

Hide Tags

Array Hash
Table
 Stack Dynamic
Programming

题意:在一个由0、1组成的矩阵中寻找全是1的最大矩形,返回其面积

thinking:

这一题是上一条的变形,具体参考

http://blog.csdn.net/doc_sgl/article/details/11832965

code:

class Solution {
public:
    int largestRectangleArea(int* height, int length) {
        stack<int> stk;
        int i = 0;
        int maxArea = 0;
        while(i < length){
            if(stk.empty() || height[stk.top()] <= height[i]){
                stk.push(i++);
            }else {
                int t = stk.top();
    			stk.pop();
				int area = height[t] * (stk.empty() ? i : i - stk.top() - 1);
                maxArea = maxArea > area ? maxArea : area;
            }
        }
        return maxArea;
    }

int maximalRectangle(vector<vector<char> > &matrix) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int m = matrix.size();
        if(m == 0)return 0;
		int n = matrix[0].size();
        if(n == 0)return 0;

		int** dp = new int*[m];
		for(int i = 0; i < m; ++i){
			dp[i] = new int[n+1];
			memset(dp[i], 0, sizeof(int)*(n+1));
		}

		for(int j = 0; j < n; ++j)
			if(matrix[0][j] == '1')dp[0][j] = 1;

		for(int j = 0; j < n; ++j)
			for(int i = 1; i < m; ++i)
				if(matrix[i][j] == '1') dp[i][j] = dp[i-1][j] + 1;

		int maxarea = 0;
		for(int i = 0; i < m; ++i){
			int tmp = largestRectangleArea(dp[i],n+1);
			if(tmp > maxarea)
				maxarea = tmp;
		}

		for(int i = 0; i < m; ++i)
			delete[] dp[i];
		delete[] dp;

		return maxarea;
    }
};
时间: 2024-10-29 17:47:13

leetcode || 85、Maximal Rectangle的相关文章

【leetcode #84 &amp; #85】Maximal Rectangle

很简单,很有趣的一类题,好像在CF上出现过..不太记得了 题意是给你N个1*N的矩形排列,要你框一个框,使得框出来的面积最大,就像这样: 也就是说,一个高度,他要向后扩展的条件是,它后面的所有矩形高度不小于它. 考虑一种最简单的情况,若整个矩形阵是升序的,那么显然 ans = max(ans,h[i] * (n - i)); 若序列不是升序的,那么对于任意位置的矩形,考虑仅向右拓展的情况,它前面的矩形只有小于它的高度的部分,以及它后面的矩形只有大于等于它,才能将这个矩形完整包括在内,如上右图的(

LeetCode OJ:Maximal Rectangle(最大矩形)

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area. 求出0,1矩阵中的最大矩形区域: DP问题,可以使用数组记下当前行位置之前的所有1的个数,然后用一个三重循环来找以(i,j)为右下角的矩形的最大的面积,比较得到最大值.这样做复杂度还是比较高的.但是胜在简单,代码如下所示: 1 class Solution { 2

leetcode || 84、Largest Rectangle in Histogram

problem: Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram. Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3]. The

最大的矩形面积 Maximal Rectangle

2018-09-15 10:23:44 一.Largest Rectangle in Histogram 在求解最大的矩形面积之前,我们先讨论一条最大直方图面积的问题. 问题描述: 问题求解: 解法一.朴素解法,O(n ^ 2). 解决的思路就是遍历一遍,如果当前的数比后一个数要小,那么当前的额数字肯定不可能是最大面积的右边界,遍历下一个数: 如果当前数比后一个大,那么假设当前的为右边界,向左进行遍历,计算面积最大值. public int largestRectangleArea(int[]

LeetCode开心刷题三十二天——85. Maximal Rectangle

85. Maximal Rectangle Hard 161653FavoriteShare Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area. Example: Input: [ ["1","0","1","0","0"],

LeetCode 84--柱状图中最大的矩形( Largest Rectangle in Histogram) 85--最大矩形(Maximal Rectangle)

84题和85五题 基本是一样的,先说84题 84--柱状图中最大的矩形( Largest Rectangle in Histogram) 思路很简单,通过循环,分别判断第 i 个柱子能够延展的长度len,最后把len*heights[i] 就是延展开的面积,最后做比对,得出最大. public int largestRectangleArea(int[] heights) { int ans=0; for(int i=0;i<heights.length;i++) { int len=1,lef

LeetCode: Maximal Rectangle

LeetCode: Maximal Rectangle Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area. 地址:https://oj.leetcode.com/problems/maximal-rectangle/ 算法:要解决这道题,得利用Largest Rectangle in Histogram这道题的解法

LeetCode: Maximal Rectangle [085]

[题目] Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area. [题意] 给定一个由0和1填充的二维矩阵,找一个全是1的最大矩形 [思路] 扫描二维矩阵,凡是扫到值为1的块时候,以当前块为矩形的左上角区块拓展,找最大矩阵. 先找出以每个"1"区块为左上角区块的最大矩形,然后求出最大全局的最大矩形. 以下图为

【leetcode刷题笔记】Maximal Rectangle

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area. 题解,很巧妙的一道题,对于一个0-1矩阵,它的每一行及以上都可以看作一个直方图(如下图所示),利用Largest Rectangle in Histogram的方法,可以在O(n)的时间搜索出这一行及以上的直方图中面积最大的矩形,对矩阵的每一行依次做这个操作,就可