leetcode 84 Largest Rectangle in Histogram

来源:互联网 发布:行业协会知乎 编辑:程序博客网 时间:2024/04/30 12:18
public class Solution {     public int largestRectangleArea(int[] heights) {       // Stack h = new Stack();       if(heights == null || heights.length==0) return 0;        else{        int ractangle=0 ;        int[] left = new int[heights.length];        int[] right = new int[heights.length];        left[0] = -1;        right[heights.length-1] = heights.length;//初始化左右边界        for(int i=1;i<heights.length;i++){                            int z = i-1;                while(z>=0 && heights[i]<=heights[z]){                 z = left[z];                 }                 left[i] = z;                                 //后右边界                       //ractangle = (heights[i] * (j+k+1))>ractangle?ractangle = heights[i] *(j+k+1):ractangle;                    }        for(int i=heights.length-2;i>=0;i--){                int z = i+1;                 while(z<heights.length && heights[i]<=heights[z]){                z = right[z];                }                right[i] = z;        }        for(int i=0;i<heights.length;i++){            ractangle = Math.max(ractangle,heights[i]*(right[i]-left[i]-1));        }        return ractangle;       }    }}
时间复杂度为o(n),运行4ms,使用数组求左右边界,并未使用单调栈
0 0