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

解析

class Solution {
    public int largestRectangleArea(int[] heights) {
        int n = heights.length;
        Stack<Integer> s = new Stack<>();
        int maxAera = 0;
        int tp; //用来保存 栈顶
        int aeraWithTop;

        int i = 0; 
        while (i < n) {
            //栈为空或者比栈顶元素大,入栈
            if (s.isEmpty() || heights[i] >= heights[s.peek()]) {
                s.push(i++);
            } else {
                tp = s.pop();
                //当前高度 * 宽度(s.peek() 表示左边元素,i为右边元素)
                aeraWithTop = heights[tp] * (s.isEmpty() ? i : i - s.peek() - 1);

                if (maxAera < aeraWithTop) {
                    maxAera = aeraWithTop;
                }
            }
        }
        while (s.isEmpty() == false) {
            tp = s.pop();
            aeraWithTop = heights[tp] * (s.isEmpty() ? i : i - s.peek() - 1);
            if (maxAera < aeraWithTop) {
                    maxAera = aeraWithTop;
                }
        }
        return maxAera;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值