84. Largest Rectangle in Histogram

這一題也是沒想到方法,按照網(wǎng)上的做法寫了一遍,思想是:

網(wǎng)上看到一種借助棧的做法,代碼很漂亮,但是解釋都非常模糊,我看懂之后,決定仔細(xì)描述思路如下:
1、如果已知height數(shù)組是升序的,應(yīng)該怎么做?
比如1,2,5,7,8
那么就是(15) vs. (24) vs. (53) vs. (72) vs. (81)
也就是max(height[i]
(size-i))
2、使用棧的目的就是構(gòu)造這樣的升序序列,按照以上方法求解。
但是height本身不一定是升序的,應(yīng)該怎樣構(gòu)建棧?
比如2,1,5,6,2,3
(1)2進(jìn)棧。s={2}, result = 0
(2)1比2小,不滿足升序條件,因此將2彈出,并記錄當(dāng)前結(jié)果為21=2。
將2替換為1重新進(jìn)棧。s={1,1}, result = 2
(3)5比1大,滿足升序條件,進(jìn)棧。s={1,1,5},result = 2
(4)6比5大,滿足升序條件,進(jìn)棧。s={1,1,5,6},result = 2
(5)2比6小,不滿足升序條件,因此將6彈出,并記錄當(dāng)前結(jié)果為6
1=6。s={1,1,5},result = 6
2比5小,不滿足升序條件,因此將5彈出,并記錄當(dāng)前結(jié)果為52=10(因?yàn)橐呀?jīng)彈出的5,6是升序的)。s={1,1},result = 10
2比1大,將彈出的5,6替換為2重新進(jìn)棧。s={1,1,2,2,2},result = 10
(6)3比2大,滿足升序條件,進(jìn)棧。s={1,1,2,2,2,3},result = 10
棧構(gòu)建完成,滿足升序條件,因此按照升序處理辦法得到上述的max(height[i]
(size-i))=max{31, 22, 23, 24, 15, 16}=8<10
綜上所述,result=10

以下是我寫的代碼

class Solution(object):
    def largestRectangleArea(self, heights):
        """
        :type heights: List[int]
        :rtype: int
        """
        res = 0
        stack = []
        for i in range(len(heights)):
            if len(stack) == 0 or heights[i] >= stack[-1]:
                stack.append(heights[i])
            else:
                count = 0
                while len(stack) != 0 and heights[i] < stack[-1]:
                    count += 1
                    res = max(res, count * stack[-1])
                    stack.pop()
                while count >= 0:
                    stack.append(heights[i])
                    count -= 1
        count = 1
        while count <= len(stack):
            res = max(res, count * stack[len(stack) - count])
            count += 1
        return res
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 1.UI的理解.....................................................
    小妮詪拽閱讀 154評論 0 0
  • 我是誰? 答案原來藏在你的眼睛里 你是誰? 說不出,還沒思考你就掀起我快樂的記憶 看不懂變幻無常的你 摸不到絢麗多...
    天海松子閱讀 192評論 0 2
  • 還沒到點(diǎn),辦公室里已經(jīng)開始蠢蠢欲動了,約會的約會,飯局的飯局,K歌的K歌,逛街的逛街,設(shè)計(jì)妹子走到我桌前,老大,跟...
    顧小寶閱讀 405評論 1 5

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