LeetCode 84 Largest Rectangle in Histogram
来源:互联网 发布:fzltchjw gb1 0 mac 编辑:程序博客网 时间:2024/04/30 15:00
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 heights = [2,1,5,6,2,3]
,
return 10
.
Runtime: 3 ms runtime beats 99.39% of java submissions.
public int largestRectangleArea(int[] heights) {if (heights == null || heights.length == 0) return 0;return getMax(heights, 0, heights.length);}int getMax(int[] heights, int s, int e) {if (s + 1 >= e) return heights[s];int min = s;//柱状图的最低点boolean sorted = true;//所有柱子是否按照升序for (int i = s; i < e; i++) {if (i > s && heights[i] < heights[i - 1]) sorted = false;if (heights[min] > heights[i]) min = i;}if (sorted) {//如果正序的话就简单了直接计算int max = 0;for (int i = s; i < e; i++) {max = Math.max(max, heights[i] * (e - i));}return max;}//不是正序的话,就以最低点为准,划分左右两个区域分别计算,最后再和加上min的比较int left = (min > s) ? getMax(heights, s, min) : 0;int right = (min < e - 1) ? getMax(heights, min + 1, e) : 0;return Math.max(Math.max(left, right), (e - s) * heights[min]);}
使用栈。参考http://www.cnblogs.com/yrbbest/p/4437139.html Runtime: 21 ms
public int largestRectangleArea2(int[] height) {if (height == null || height.length == 0) return 0;Stack<Integer> stack = new Stack<Integer>();int max = 0;for (int i = 0; i <= height.length; i++) {int curt = (i == height.length) ? -1 : height[i];while (!stack.isEmpty() && curt <= height[stack.peek()]) {int h = height[stack.pop()];int w = stack.isEmpty() ? i : i - stack.peek() - 1;max = Math.max(max, h * w);}stack.push(i);}return max;}
0 0
- [leetcode 84] Largest Rectangle in Histogram
- 【LeetCode】[84] Largest Rectangle in Histogram
- leetcode || 84、Largest Rectangle in Histogram
- LeetCode---(84)Largest Rectangle in Histogram
- 【Leetcode】Largest Rectangle in Histogram #84
- leetcode 84 :Largest Rectangle in Histogram
- leetcode 84: Largest Rectangle in Histogram
- [leetcode-84]Largest Rectangle in Histogram(c++)
- LeetCode(84) Largest Rectangle in Histogram
- leetcode 84 Largest Rectangle in Histogram
- LeetCode 84 Largest Rectangle in Histogram
- leetcode 84 Largest Rectangle in Histogram
- Leetcode 84 Largest Rectangle in Histogram
- LeetCode No.84 Largest Rectangle in Histogram
- LeetCode 84 Largest Rectangle in Histogram
- leetcode 84 Largest Rectangle in Histogram
- [Leetcode] #84 Largest Rectangle in Histogram
- LeetCode: Largest Rectangle in Histogram
- 荷兰国旗问题(改造快速排序)
- 求两个数a和b的最大公约数
- HelloCharts重新绘图时旧数据残留问题
- JavaScriptCore(2)
- Mxnet学习系列2----如何制作image.rec(新版本)
- LeetCode 84 Largest Rectangle in Histogram
- tomcat集群配置
- EL 表单打印输出
- 关于数据库ceil()函数,floor()函数,round()函数和trunc()函数
- 配置linux服务器做简单的路由器
- 新人学习Struts2笔记(1)
- 在Unity3D里使用DLL
- [gitbook] Android框架分析系列之Android Binder详解
- UIPageControl