您的位置:首页 > 其它

LeetCode Largest Rectangle in Histogram

2015-09-17 04:35 393 查看
原题链接在这里:https://leetcode.com/problems/largest-rectangle-in-histogram/

参考了这篇帖子:/article/5789867.html

里面讲的很清楚,生成了stack, 当遇到比stack 顶部更大array元素时或者stack为空时,就把更打元素的index存入stack中。

当遇到小元素时,要出栈并更新maxArea.

Note: 1. 需新生成一个array, 长度为原array 长度+1,用Arrays.copyOf()来复制原array, 并把最后一个数字设为0.

2. 数组里存的是index, 而不是array的元素。

AC Java:

public class Solution {
public int largestRectangleArea(int[] height) {
if(height == null || height.length == 0){
return 0;
}
Stack<Integer> stk = new Stack<Integer>();
int [] h = new int[height.length + 1];
h = Arrays.copyOf(height,height.length+1);
int i = 0;
int maxArea = 0;
while(i<h.length){
if(stk.isEmpty() || h[stk.peek()] <= h[i]){
stk.push(i);
i++;
}else{
int index = stk.pop();
maxArea = Math.max(maxArea, h[index] * (stk.isEmpty() ? i : i-stk.peek()-1));
}
}
return maxArea;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: