IT技術小屋

          秋風秋雨,皆入我心

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            38 隨筆 :: 1 文章 :: 19 評論 :: 0 Trackbacks
          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 height = [2,1,5,6,2,3],
          return 10.

          本題需要使用棧維護一個高度單調遞增的序列下標,如果遇到一個元素比當前棧頂元素高度小,那么出棧,并計算當前最大面積。如果棧為空,需要特殊考慮。
           1 public class LargestRectangleinHistogram {
           2     public int largestRectangleArea(int[] height) {
           3         Stack<Integer> stack = new Stack<Integer>();
           4         int i = 0;
           5         int maxArea = 0;
           6         int[] h = new int[height.length + 1];
           7         h = Arrays.copyOf(height, height.length + 1);
           8         while (i < h.length) {
           9             if (stack.isEmpty() || h[stack.peek()] <= h[i]) {
          10                 stack.push(i++);
          11             } else {
          12                 int t = stack.pop();
          13                 maxArea = Math.max(maxArea, h[t] * (stack.isEmpty() ? i : i - stack.peek() - 1));
          14             }
          15         }
          16         return maxArea;
          17     }
          18 }
          posted on 2014-01-05 12:31 Meng Lee 閱讀(278) 評論(0)  編輯  收藏 所屬分類: Leetcode
          主站蜘蛛池模板: 新泰市| 长丰县| 漠河县| 上高县| 五大连池市| 西峡县| 崇信县| 怀宁县| 陆河县| 陇川县| 霍城县| 和龙市| 嘉禾县| 中卫市| 高台县| 湾仔区| 宽城| 灵宝市| 赤城县| 噶尔县| 辽阳市| 沂源县| 婺源县| 伊春市| 清水河县| 汉中市| 萨迦县| 临安市| 桃园市| 荣成市| 精河县| 上饶市| 丘北县| 通道| 顺昌县| 莱州市| 广元市| 六枝特区| 伊吾县| 望奎县| 集安市|