Hard-题目27:84. Largest Rectangle in Histogram

转载 2016年05月31日 23:39:08

题目原文:
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 largest rectangle is shown in the shaded area, which has area = 10 unit.

For example,
Given heights = [2,1,5,6,2,3],
return 10.
题目大意:
给出一个直方图,求图中最大矩形面积。
题目分析:
首先是朴素解法,遍历所有左端点为i,右端点为j的矩形的面积。复杂度O(n2),毫无疑问tle。
参考网上大神的解法,我理解如下:
维护一个递增的栈,遍历数组时,如果当前高度height[i]>stack.top则入栈,反之弹出栈直至栈顶元素<height[i],然后计算出最后弹出那个边“左右延伸”所得的矩形的面积,并更新最大值,然后height[i]入栈。
注意栈中存的是下标,这样便于计算宽度=下标差。
源码:(language:cpp)

class Solution {
public:
    int largestRectangleArea(vector<int> &height) {
        if(height.size() == 0) return 0; 
        stack<int> st;
        int MAX = 0;
        height.push_back(0);
        int leftarea = 0, rightarea = 0;
        for(int i = 0; i < height.size(); ++i){
            while(!st.empty() && height[st.top()] > height[i]){
                int tmp = st.top();
                st.pop();
                leftarea = (st.empty() ? tmp + 1 : tmp - st.top()) * height[tmp]; //以tmp为高度,tmp所在柱以及向左延伸出来的矩形面积
                rightarea = (i - tmp - 1) * height[tmp]; //以tmp为高度,向右边延伸出来的矩形面积
                if((leftarea + rightarea) > MAX) MAX = (leftarea + rightarea);
            }
            st.push(i);
        }
        return MAX;
    }
};

成绩:
24ms,18.83%,24ms,58.54%
cmershen的碎碎念:
以后的问题大多超越我的能力范围,解题步骤均摘抄自他人博客。

LeetCode 84 Largest Rectangle in Histogram (Python详解及实现)

【题目】 Given n non-negative integers representingthe histogram's bar height where the width of each b...
  • yangjingjing9
  • yangjingjing9
  • 2017年08月09日 15:34
  • 265

LeetCode84——Largest Rectangle in Histogram

在柱状图中找到面积最大的矩形。
  • zhangxiao93
  • zhangxiao93
  • 2016年01月27日 22:34
  • 932

[leetcode-84]Largest Rectangle in Histogram(c++)

问题描述:原题链接分析:我之前做过这道题,但是无意间看到网上的一种做法,实在是拍案叫绝,爱不释手,第一个发明这个解法的大神,请收下我的膝盖。 这道题很明显是用栈的结构,但是这里面有几个小问题,就是怎...
  • zdavb
  • zdavb
  • 2015年08月09日 17:29
  • 232

LeetCode(84) Largest Rectangle in Histogram

题目Given n non-negative integers representing the histogram’s bar height where the width of each bar ...
  • fly_yr
  • fly_yr
  • 2015年12月21日 15:34
  • 1679

LeetCode84 Largest Rectangle in Histogram java题解

题目: Given n non-negative integers representing the histogram's bar height where the width of ea...
  • u012249528
  • u012249528
  • 2015年06月27日 11:21
  • 752

LeetCode --- 84. Largest Rectangle in Histogram

题目链接:Largest Rectangle in Histogram Given n non-negative integers representing the histogram's bar ...
  • makuiyu
  • makuiyu
  • 2015年04月03日 17:07
  • 2307

leetcode_question_85 Largest Rectangle in Histogram

Given n non-negative integers representing the histogram's bar height where the width of each bar is...
  • doc_sgl
  • doc_sgl
  • 2013年09月18日 14:00
  • 10018

Largest Rectangle in Histogram -- LeetCode

原题链接: http://oj.leetcode.com/problems/largest-rectangle-in-histogram/  这道题brute force的方法很直接,就是对于每一个窗...
  • linhuanmars
  • linhuanmars
  • 2014年03月05日 08:52
  • 15496

LeetCode Largest Rectangle in Histogram (单调栈)

Given n non-negative integers representing the histogram's bar height where the width of each bar is...
  • u011345136
  • u011345136
  • 2015年04月11日 21:37
  • 829

POJ-2559-Largest Rectangle in a Histogram-单调栈

朴素做法就是 枚举每一个i的高度  为矩形的宽,然后往两边搜索得到最长的矩形   把所有答案比较一遍得到最大的ans 当然,这样做会超时。一个可以优化的地方就是 n次枚举中,有很多次是可以省略掉的,用...
  • viphong
  • viphong
  • 2015年08月25日 22:37
  • 582
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hard-题目27:84. Largest Rectangle in Histogram
举报原因:
原因补充:

(最多只允许输入30个字)