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;
    }
    };
  • 相关阅读:
    html
    jQuery
    Python基础(一)
    excel中怎样批量取消隐藏工作表
    AD密码过期查询
    @Controller和@RestController的区别
    编写一个JPA测试用例
    SpringBoot(二)——使用Mysql和JPA
    Linux命令大全
    Centos7安装Mysql
  • 原文地址:https://www.cnblogs.com/Vae1990Silence/p/4281413.html
Copyright © 2011-2022 走看看