贪心2-- Largest Rectangle in Histogram(LeetCode84)

来源:互联网 发布:卓奇电脑网络服务中心 编辑:程序博客网 时间:2024/06/05 08:13

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.

public class Solution {    // 跳跃的优化: 贪心的思想    public int largestRectangleArea(int[] heights) {        int n = heights.length;        if(n == 0){            return 0;        }        int[] left = new int[n];        left[0] = 0;        for(int i = 1; i < n; i++){            int A = i;            while(A >0 && heights[A - 1] >= heights[i]){                A = left[A-1];            }            left[i] = A;        }        int[] right = new int[n];        right[n-1] = n-1;        for(int i = n-2; i >= 0; i--){            int A = i;            while(A < n - 1 && heights[A+1] >= heights[i]){                A = right[A + 1];            }            right[i] = A;        }        int ans = 0;        for(int i = 0; i < n; i++){            ans = Math.max(ans, heights[i] * (right[i] - left[i] + 1));        }        return ans;    }}