LeetCode-85-Maximal Rectangle 类似上一题,n遍单调栈

来源:互联网 发布:合肥数码美工招聘信息 编辑:程序博客网 时间:2024/06/11 16:42
class Solution(object):    def maximalRectangle(self, matrix):        """        :type matrix: List[List[str]]        :rtype: int        """        Lenx=len(matrix)        if Lenx==0:return 0        Leny=len(matrix[0])        dp=[[0 for y in range(Leny+1)]for x in range(Lenx+1)]        for i in range(Lenx):            for j in range(Leny-1,-1,-1):                if matrix[i][j]=='1':                    dp[i][j]=dp[i][j+1]+1                ans=0                for i in range(Leny):            heights=[]            for j in range(Lenx):                heights.append(dp[j][i])            ans=max(ans,self.largestRectangleArea(heights))                    return ans        def largestRectangleArea(self, heights):        """        :type heights: List[int]        :rtype: int        """        ans=0        heights.append(0)        stack=[]        stack.append((0,-1))#(value,position)        Len=len(heights)        for i in range(Len):            top=stack[-1]            if heights[i]>top[0]:                stack.append((heights[i],i))            elif heights[i]<top[0]:                while(heights[i]<stack[-1][0]):                    ans=max((i-stack[-1][1])*stack[-1][0],ans)                    p=stack[-1][1]                    stack.pop()                stack.append((heights[i],p))        return ans                    

原创粉丝点击