您的位置:首页 > 编程语言 > Java开发

LeetCode 84 (Largest Rectangle in Histogram)java

2016-11-24 11:27 507 查看
原题: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.


求数组所构成的长方形中面积最大的;

思路:见代码注释,我们经常会遇到求数组的某项属性,我们可以将思维引导到“必须以数组某位结尾(或开头、包含)的情况”;

分析这种情况下需要满足的条件,看对解决问题是否能起到帮助;

代码:/*
Author:Jassy
Time:2016/11/24
Note:数组中的最大矩形,可以转化为求“必须包含某个高度条的最大矩形”
则该矩形所有元素都大于这个高度条;
则找左边和右边第一个小于该高度的;
*/
public class Solution {
public int largestRectangleArea(int[] heights) {
if(heights.length==0){
return 0;
}
int[] leftMin=new int[heights.length];
int[] rightMin=new int[heights.length];
leftMin[0]=-1;
rightMin[heights.length-1]=heights.length;
//得到左边数组;
for(int i=1;i<heights.length;i++){
if(heights[i]>heights[i-1]){
leftMin[i]=i-1;
}else{
int p=leftMin[i-1];
while(p>=0 && heights[i]<=heights[p]){
p=leftMin[p];
}
leftMin[i]=p;
}
}
//得到右边数组;
for(int i=heights.length-2;i>=0;i--){
if(heights[i]>heights[i+1]){
rightMin[i]=i+1;
}else{
int p=rightMin[i+1];
while(p<heights.length && heights[i]<=heights[p]){
p=rightMin[p];
}
rightMin[i]=p;
}
}
//计算;
int area=0;
for(int i=0;i<heights.length;i++){
area=Math.max(area,(rightMin[i]-leftMin[i]-1)*heights[i]);
}
return area;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: