Question
Given a 2D binary matrix filled with 0’s and 1’s, find the largest square containing all 1’s and return its area.
For example, given the following matrix:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
Return 4.
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
Show Tags
Show Similar Problems
Solution 1
Get idea from here.
class Solution(object):
def maximalSquare(self, matrix):
"""
:type matrix: List[List[str]]
:rtype: int
"""
maxv = 0
if matrix==[] or len(matrix)==0 or len(matrix[0])==0:
return maxv
m, n = len(matrix), len(matrix[0])
height = [0]*n
for mind in range(m):
for nind in range(n):
height[nind] += int(matrix[mind][nind])
maxv = max( maxv, self.largestRectangle(height) )
return maxv
def largestRectangle(self,height):
maxv = 0
if height==[] or len(height)==0:
return maxv
stack = []
for ind in range(len(height)):
while stack!=[] and height[ind]<=height[stack[-1]]:
index = stack.pop()
curarea = ind*height[index] if stack==[] else (ind-stack[-1]-1)*height[index]
maxv = max(maxv, curarea)
stack.append(ind)
while stack!=[]:
index = stack.pop()
curarea = len(height)*height[index] if stack==[] else (len(height)-stack[-1]-1)*height[index]
maxv = max( maxv, curarea )
return maxv
Solution 2
python