蠡口85. Maximal Rectangle
这道题可以说是84的延伸。可以把从底部向上连续1的个数想成84题中柱子的高度,
class Solution(object): def LargestRectangleInHistogram(self,heights): mystack=[] right,ans=0,0 while right<len(heights): if len(mystack)==0 or heights[mystack[-1]]<=heights[right]: mystack.append(right) right+=1 else: idx=mystack.pop() while len(mystack)>0 and heights[mystack[-1]]==heights[idx]: mystack.pop() left=-1 if len(mystack)==0 else mystack[-1] ans=max(ans,heights[idx]*(right-left-1)) if len(mystack)==0: return(ans) right=mystack[-1]+1 while mystack: idx=mystack.pop() while len(mystack)>0 and heights[idx]==heights[mystack[-1]]: mystack.pop() left=-1 if len(mystack)==0 else mystack[-1] ans=max(ans,heights[idx]*(right-left-1)) #print(ans) return(ans) def maximalRectangle(self, matrix): """ :type matrix: List[List[str]] :rtype: int """ m=len(matrix) if m==0: return(0) n=len(matrix[0]) if n==0: return(0) heights=map(int,matrix[0]) ans=self.LargestRectangleInHistogram(heights) for i in range(1,m): for j in range(n): if matrix[i][j]=="0": heights[j]=0 else: heights[j]+=1 ans=max(ans,self.LargestRectangleInHistogram(heights)) return(ans)
详细解答参考basketwang的YouTube(https://www.youtube.com/watch?v=2Yk3Avrzauk)