IT技術(shù)小屋

          秋風(fēng)秋雨,皆入我心

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            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.

          本題需要使用棧維護一個高度單調(diào)遞增的序列下標(biāo),如果遇到一個元素比當(dāng)前棧頂元素高度小,那么出棧,并計算當(dāng)前最大面積。如果棧為空,需要特殊考慮。
           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 閱讀(273) 評論(0)  編輯  收藏 所屬分類: Leetcode
          主站蜘蛛池模板: 太谷县| 察雅县| 威信县| 忻城县| 揭阳市| 巴彦淖尔市| 穆棱市| 黑河市| 河池市| 磐安县| 长汀县| 宝应县| 桂东县| 荥阳市| 信阳市| 涡阳县| 平度市| 溧阳市| 丰宁| 合水县| 砚山县| 都昌县| 庆元县| 东乡族自治县| 土默特右旗| 翁源县| 崇礼县| 云梦县| 张家港市| 河东区| 大新县| 河间市| 高唐县| 岢岚县| 富裕县| 绍兴市| 通城县| 水城县| 罗定市| 聂荣县| 年辖:市辖区|