Wednesday, March 20, 2013
Largest Rectangle in Histogram
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 height = [2,1,5,6,2,3],
return 10.
using a stack, when the next height is larger, push its position into the stack, otherwise, pop a position and calculate the area of the maximum rectangle that can be formed using the height at the position.
remember: the bar right next to the top position at the stack after pop is always larger or equal to the bar at the poped position.
public class Solution {
public int largestRectangleArea(int[] height) {
// Start typing your Java solution below
// DO NOT write main() function
if(height==null || height.length == 0) return 0;
LinkedList<Integer> stack = new LinkedList<Integer>();
stack.add(0);
int i = 1;
int ret = height[0];
while( i < height.length + 1){
int nextv = i < height.length? height[i] : 0;
if(stack.isEmpty() || height[stack.getLast()] <= nextv)
{
stack.add(i++);
}
else{
int t = stack.removeLast();
ret = Math.max(ret, height[t] * (stack.isEmpty() ? i : i-1-stack.getLast()) );
}
}
return ret;
}
}
Subscribe to:
Post Comments (Atom)
Manacher's Longest Palindromic Substring Algorithm
http://manacher-viz.s3-website-us-east-1.amazonaws.com/#/
-
Suppose a bus is running on a loop route. It takes 10 mins for the bus to finish the route. If a guy arrives at a bus stop at uniformly rand...
-
Question: You are playing a card game with me. Suppose I shuffle a deck of 52 cards, then I show you the card one by one to you from top t...
-
Move Objects There are N objects kept in a row. The ith object is at position x_i. You want to partition them into K groups. You want ...
No comments:
Post a Comment