Largest Rectangle in Histogram (Python)
kitt
posted @ 2014年2月05日 17:10
in LeetCode
, 2869 阅读
看了这个讲解, O(N)解法, 挺明白的。要一个栈来存放非递减的height序列, 即碰到大于等于栈顶的就入栈, 碰到小于栈顶的就pop。对于每个pop出的元素h[stack[top]],都要计算以它为最低高度的矩形的面积, 高度就是h[stack[top]], 宽度就是i - stack[-1] - 1, 注意栈中的元素都是非递减的。在h末尾多加一个0的目的是保证栈中的元素都可以被pop出。感谢朱老师提供了一个升级版(Largest rectangle problem)。
class Solution: # @param height, a list of integer # @return an integer def largestRectangleArea(self, height): stack = [] i = 0 maxArea = 0 h = height + [0] h_length = len(h) while i < h_length: # not stack means stack is empty if (not stack) or h[stack[-1]] <= h[i]: stack.append(i) i += 1 else: t = stack.pop() maxArea = max(maxArea, h[t] * (i if not stack else i - stack[-1] - 1)) return maxArea