Maximum Subarray (Python)
Add Binary (Python)

Largest Rectangle in Histogram (Python)

kitt posted @ 2014年2月05日 17:10 in LeetCode , 2851 阅读

看了这个讲解, 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

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter