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;
    }
}

猜你喜欢

转载自blog.csdn.net/lutte_/article/details/79504368
今日推荐