LeetCode 84 Largest Rectangle in Histogram
2016-10-26 17:33
501 查看
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 =
The largest rectangle is shown in the shaded area, which has area =
For example,
Given heights =
return
Runtime: 3
ms runtime beats 99.39% of java submissions.
使用栈。参考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;
}
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 =
10unit.
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;
}
相关文章推荐
- LeetCode(84) Largest Rectangle in Histogram
- leetcode[84]Largest Rectangle in Histogram
- LeetCode84 Largest Rectangle in Histogram
- leetcode hard专杀之84. Largest Rectangle in Histogram
- leetcode 84 :Largest Rectangle in Histogram
- LeetCode 84 Largest Rectangle in Histogram
- LeetCode 84 (Largest Rectangle in Histogram)java
- 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】Array——Largest Rectangle in Histogram(84)
- leetcode 84 Largest Rectangle in Histogram
- Leetcode_84 Largest Rectangle in Histogram
- LeetCode84——Largest Rectangle in Histogram
- [leetcode-84]Largest Rectangle in Histogram(c++)
- leetcode_question_84 Largest Rectangle in Histogram
- LeetCode-84-Largest Rectangle in Histogram 经典题目,单调栈
- (java)leetcode-84:Largest Rectangle in Histogram
- leetcode 84 Largest Rectangle in Histogram (单调栈)