zoukankan      html  css  js  c++  java
  • 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.

    Example:

    Input: [2,1,5,6,2,3]
    Output: 10

    my code:(very inefficient)

    class Solution {
    public:
        int largestRectangleArea(vector<int>& heights) {
            int len = heights.size();
            int res = 0;
            for (int i = 0; i < len; ++i) {
                int nums = 1;
                for (int j = i+1; j < len; ++j) {
                    if (heights[j] >= heights[i])
                        nums++;
                    else 
                        break;
                }
                for (int k = i-1; k >= 0; --k) {
                    if (heights[k] >= heights[i])
                        nums++;
                    else
                        break;
                }
                res = max(res, heights[i]*nums);
            }
            return res;
        }
    };
    
    Runtime: 1664 ms, faster than 1.28% of C++ online submissions for Largest Rectangle in Histogram.

    height efficient code:

    class Solution {
    public:
        int largestRectangleArea(vector<int>& heights) {
            int len = heights.size();
            int res = 0;
            stack<int> s;
            heights.push_back(0);
            for (int i = 0; i <= len; ++i) {
                int h = i==len ? 0 : heights[i];
                while (!s.empty() && h < heights[s.top()]) {
                    int height = heights[s.top()];
                    s.pop();
                    int start = s.empty() ? -1 : s.top();
                    int nums = i - start - 1;
                    res = max(res, height*nums);
                }
                s.push(i);
            }
            
            return res;
        }
    };
    

    Runtime: 12 ms, faster than 45.96% of C++ online submissions for Largest Rectangle in Histogram.

    stack中的数据(索引)升序进行排列,遇到小于前面的数开始计算,并将stack中比当前元素大的数pop。

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    python刷新七牛云CDN缓存
    python 操作redis
    redis 设置密码
    redis 允许其他机器连接设置方法
    redis持久化
    redis操作
    redis简介及与memcached比较
    dataframe 处理某列的小数位数并加特殊符号
    django 生成和下载CSV文件
    django 重定向
  • 原文地址:https://www.cnblogs.com/h-hkai/p/9849075.html
Copyright © 2011-2022 走看看