leetcode

来源:互联网 发布:如何申请淘宝小号涮单 编辑:程序博客网 时间:2024/06/06 16:28

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.

84. Largest Rectangle in Histogram-1

Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3].

84. Largest Rectangle in Histogram-2

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.

Solution1:

  public int largestRectangleArea(int[] height) {    int len = height.length;    LinkedList<Integer> s = new LinkedList<Integer>();    int maxArea = 0;    for (int i = 0; i <= len; i++) {      int h = (i == len ? 0 : height[i]);      if (s.isEmpty() || h >= height[s.peek()]) {        s.push(i);      } else {        int tp = s.pop();        maxArea = Math.max(maxArea, height[tp] * (s.isEmpty() ? i : i - 1 - s.peek()));        i--;      }    }    return maxArea;  }

Solution2:

better

  public int largestRectangleArea(int[] height) {    int len = height.length;    LinkedList<Integer> s = new LinkedList<Integer>();    int maxArea = 0;    for (int i = 0; i <= len; i++) {      int h = (i == len ? 0 : height[i]);      while (s.size() > 0 && h < height[s.peek()]) {        int tp = s.pop();        maxArea = Math.max(maxArea, height[tp] * (s.isEmpty() ? i : i - 1 - s.peek()));      }      s.push(i);    }    return maxArea;  }
0 0