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;
}
}
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;
}
}
相关文章推荐
- (java)leetcode-84:Largest Rectangle in Histogram
- LeetcodeLargest -84- Rectangle in Histogram 94.01%
- LeetCode(84) Largest Rectangle in Histogram
- LeetCode84——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 84, 85]Largest Rectangle in Histogram / Maximal Rectangle
- Leetcode 84 Largest Rectangle in Histogram
- leetcode[84]Largest Rectangle in Histogram
- LeetCode84 Largest Rectangle in Histogram
- LeetCode84 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]84 Largest Rectangle in Histogram
- Largest Rectangle in Histogram leetcode java
- Largest Rectangle in Histogram leetcode java