84. Largest Rectangle in Histogram(dp)
来源:互联网 发布:在线购物商城系统源码 编辑:程序博客网 时间:2024/05/29 12:19
题目:
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
.
设置两个数组left,right,记录每个点能到最左和最右的坐标,时间复杂度O(n)
public class Solution { public int largestRectangleArea(int[] heights) { if(heights.length==0)return 0; int[] left = new int[heights.length]; int[] right = new int[heights.length]; left[0]=0; for(int i=1;i<heights.length;i++) { int k=i; while(k>0 && heights[i]<=heights[k-1]) { k=left[k-1]; } left[i]=k; } right[heights.length-1]=heights.length-1; for(int i=heights.length-2;i>=0;i--) { int k=i; while(k<heights.length-1 && heights[i]<=heights[k+1]) { k=right[k+1]; } right[i]=k; } int max = -1; for(int i=0;i<heights.length;i++) { int temp = heights[i]*(right[i]-left[i]+1); max = Math.max(max, temp); } return max; }}
解法二:
采用栈:
public class Solution {// O(n) using one stack public int largestRectangleArea(int[] height) { // Start typing your Java solution below // DO NOT write main() function int area = 0; java.util.Stack<Integer> stack = new java.util.Stack<Integer>(); for (int i = 0; i < height.length; i++) { if (stack.empty() || height[stack.peek()] < height[i]) { stack.push(i); } else { int start = stack.pop(); int width = stack.empty() ? i : i - stack.peek() - 1; area = Math.max(area, height[start] * width); i--; } } while (!stack.empty()) { int start = stack.pop(); int width = stack.empty() ? height.length : height.length - stack.peek() - 1; area = Math.max(area, height[start] * width); } return area; } }
0 0
- 84. Largest Rectangle in Histogram(dp)
- 84. Largest Rectangle in Histogram
- 84. Largest Rectangle in Histogram
- 84. Largest Rectangle in Histogram
- 84. largest rectangle in histogram
- 84. Largest Rectangle in Histogram
- 84.Largest Rectangle in Histogram
- 84. Largest Rectangle in Histogram
- 84. Largest Rectangle in Histogram
- 84. Largest Rectangle in Histogram
- 84. Largest Rectangle in Histogram
- 84. Largest Rectangle in Histogram
- 84. Largest Rectangle in Histogram
- 84. Largest Rectangle in Histogram
- 84. Largest Rectangle in Histogram
- 84. Largest Rectangle in Histogram
- 84. Largest Rectangle in Histogram
- 84. Largest Rectangle in Histogram
- HDU 5901 Count Primes (模板 + 数论知识)——2016 ACM/ICPC Asia Regional Shenyang Online
- Java数据结构之双向链表
- JavaScript的核心
- win7安装iis及web配置教程
- 2016 ACM/ICPC Asia Regional Shenyang Online HDU 5900 QSC and Master(区间dp水题)
- 84. Largest Rectangle in Histogram(dp)
- 用story review meeting 来准备 sprint planning
- 第三方okhttp网络访问框架使用教程
- python小爬虫
- iOS视频播放
- Python版libsvm安装
- 关于Notepad++编辑html文件出现乱码问题的解决方案
- Sprint Planning 是否需要分子任务
- PowerDesigner逆向工程导入MYSQL数据库总结