leetcode problem 84. Largest Rectangle in Histogram

16 篇文章 0 订阅
7 篇文章 0 订阅

Description

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.

Solution

This problem is really hard for me, so I came to Discuss and found most methods are based on stack.

If there is a largest rectangle, position from s to e, there must be i between s and e, the height of i is the smallest in height[s:e], and height[s-1], height[e+1] must lower than height[i].
so, for each height[n], n=0,1,…,height.size()-1. calculate when height[n] is the smallest between height[s:e] and find out s e.

Below is cpp code.

class Solution {
    public:
        int largestRectangleArea(vector<int> &height) {
            int res(0);
            height.push_back(0);
            vector<int> index;
            int cur_height(0);
            int cur_index(0);
            for(int i = 0; i < height.size(); ++i){
                while(!index.empty() && height[index.back()] >= height[i]){
                    cur_height = height[index.back()];
                    index.pop_back();
                    cur_index = index.empty()? -1:index.back();
                    res = max(res, cur_height * (i - cur_index - 1));
                }
                index.push_back(i);
            }
           
            return res;
        }
    };

i is e and cur_index is s the height is ‘cur_height’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值