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 閱讀(274) 評論(0)  編輯  收藏 所屬分類: Leetcode
          主站蜘蛛池模板: 手游| 武夷山市| 襄汾县| 九龙县| 泰来县| 乌兰县| 申扎县| 景德镇市| 陕西省| 新乡市| 永昌县| 新野县| 凌云县| 贵州省| 甘孜县| 邓州市| 茌平县| 巫溪县| 宾阳县| 江川县| 泸溪县| 九龙县| 怀化市| 平阴县| 永登县| 巩义市| 迁西县| 天等县| 台中县| 吉首市| 宕昌县| 南江县| 巍山| 成武县| 纳雍县| 海淀区| 和林格尔县| 鞍山市| 武汉市| 汝州市| 宁国市|