Maximal Rectangle
Pre requisite: Maximum Area Histogram
Problem Link: https://leetcode.com/problems/maximal-rectangle/
class Solution:
def maximalRectangle(self, matrix: List[List[str]]) -> int:
def maxAreaHistogram(nums):
nsl=[]
nsr=[]
n=len(nums)
s=[]
for i in range(n):
if(len(s)==0):
nsl.append(-1)
else:
if(nums[s[-1]]<nums[i]):
nsl.append(s[-1])
else:
while(len(s)>0 and nums[s[-1]]>=nums[i]):
s.pop()
if(len(s)==0):
nsl.append(-1)
else:
nsl.append(s[-1])
s.append(i)
s=[]
for i in range(n-1,-1,-1):
if(len(s)==0):
nsr.append(n)
else:
if(nums[s[-1]]<nums[i]):
nsr.append(s[-1])
else:
while(len(s)>0 and nums[s[-1]]>=nums[i]):
s.pop()
if(len(s)==0):
nsr.append(n)
else:
nsr.append(s[-1])
s.append(i)
nsr=nsr[::-1]
ans=0
for i in range(n):
ans=max(ans,(nsr[i]-nsl[i]-1)*nums[i])
return ans
ans=0
rows=len(matrix)
columns=len(matrix[0])
for i in range(rows):
for j in range(columns):
if(i==0):
matrix[i][j]=int(matrix[i][j])
else:
if(matrix[i][j]!='0'):
matrix[i][j]=int(matrix[i-1][j])+1
else:
matrix[i][j]=int(matrix[i][j])
ans=max(ans,maxAreaHistogram(matrix[i]))
return ans
Last updated