84. Largest Rectangle in Histogram

class Solution(object):
    def largestRectangleArea(self, heights):
        """
        :type heights: List[int]
        :rtype: int
        """
        #O(n) solution 
        #for each rectangle, calculate the max area formed with its height h(with h being the smallest rectangle) 
        #then get the max of all the results
        #get the index of the first smaller rectangle to its left: left_index
        #and the index of the first smaller rectangle to its right: right_index
        #use mono increasing stack 
        if not heights: return 0 
        l=len(heights)
        if l==1: return heights[0]
        #store the index of the rectangles
        #stack is mono increasing, therefore we can easily locate the most adjacent index
        stack=[-1,0]
        res=0
        for i in range(1,l):
            while len(stack)>1 and  heights[i]<heights[stack[-1]]:
                res=max(res,heights[stack.pop()]*(i-stack[-1]-1))
            stack.append(i)
            
        while len(stack)>1:
            res=max(res,heights[stack.pop()]*(l-stack[-1]-1))
        return res
            
            
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容