zoukankan      html  css  js  c++  java
  • leetcode[84]Largest Rectangle in Histogram

    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 height = [2,1,5,6,2,3],
    return 10.

    class Solution {
    public:
    /*
        int Max(int a, int b){return a > b ? a : b;}  
        int largestRectangleArea(vector<int> &height) {  
            height.push_back(0);  
            stack<int> stk;  
            int i = 0;  
            int maxArea = 0;  
            while(i < height.size()){  
                if(stk.empty() || height[stk.top()] <= height[i]){  
                    stk.push(i++);  
                }else {  
                    int t = stk.top();  
                    stk.pop();  
                    maxArea = Max(maxArea, height[t] * (stk.empty() ? i : i - t));  
                }  
            }  
            return maxArea;  
        }
    
    int largestRectangleArea(vector<int> &height) 
    {
        if(height.empty())return 0;
        height.push_back(0);
        int maxRes=0;
        stack<int> sta;
        for (int i=0;i<height.size();i++)
        {
            if (sta.empty()||(!sta.empty()&&height[i]>=height[sta.top()]))
            {
                sta.push(i);
            }
            else
            {
                int top;
                int newRes;
                while(!sta.empty()&&height[i]<height[sta.top()])
                {
                    top=sta.top();
                    sta.pop();
                    newRes=(sta.empty()?i:(i-sta.top()-1))*height[top];
                    maxRes=maxRes>newRes?maxRes:newRes;
                    
                }
                sta.push(i);
            }
        }
        return maxRes;
    }
    */
    int largestRectangleArea(vector<int> &height) 
    {
        if(height.empty())return 0;
        height.push_back(0);
        int maxRes=0;
        stack<int> sta;
        for (int i=0;i<height.size();i++)
        {
            int top;
            int newRes;
            while(!sta.empty()&&height[i]<height[sta.top()])
            {
                top=sta.top();
                sta.pop();
                newRes=(sta.empty()?i:(i-sta.top()-1))*height[top];
                maxRes=maxRes>newRes?maxRes:newRes;                
            }
            sta.push(i);
        }
        return maxRes;
    }
    };
  • 相关阅读:
    ViewState
    Insert
    Copy: 了解SQL Server锁争用:NOLOCK 和 ROWLOCK 的秘密
    How to check number of Active connections in SQL server?
    (转)IIS6上启用Gzip压缩(HTTP压缩) 详解
    Reference (SQL Server 2005自动异机备份)
    [转] ios中KeyChain用途
    ios 中的事件
    unity3d 鼠标事件穿透GUI界面的问题
    Unity StartCoroutine注意的问题
  • 原文地址:https://www.cnblogs.com/Vae1990Silence/p/4281413.html
Copyright © 2011-2022 走看看