程序员代码面试指南 python实现(求最大子矩阵的大小)
程序员代码面试指南 python实现(第一章 栈和队列)
求最大子矩阵的大小
题目描述
第一步:
第二步:
详解第二步:
class Stack(object):
def __init__(self):
self.item = []
def isEmpty(self):
return self.item == []
def push(self,newElem):
self.item.append(newElem)
def pop(self):
if self.isEmpty():
raise Exception("Your stack is Empty!")
else:
return self.item.pop()
def peek(self):
if self.isEmpty():
raise Exception("Your stack is Empty!")
else:
return self.item[len(self.item)-1]
def size(self):
return len(self.item)
def maxRocFromBottom(height):
if height == None or len(height) == 0:
return
maxArea = 0
stack = Stack()
for i in range(len(height)):
while stack.isEmpty() != True and height[i] <= height[stack.peek()]:
j = stack.pop()
if stack.isEmpty():
k = -1
else:
k = stack.peek()
curArea = (i-k-1)*height[j]
maxArea = max(maxArea,curArea)
stack.push(i)
while stack.isEmpty() != True:
j = stack.pop()
if stack.isEmpty() :
k = -1
else:
k = stack.peek()
curArea = (len(height) - k - 1)*height[j]
maxArea = max(maxArea,curArea)
return maxArea
def maxRecSize(map):
if map == None or len(map) == 0 or len(map[0]) == 0:
return
maxArea = 0
height = [0 for index in range(len(map[0]))]
print(height)
for i in range(len(map)):
for j in range(len(map[0])):
if map[i][j] == 0:
height[j] = 0
else:
height[j] = height[j]+1
maxArea = max(maxRocFromBottom(height),maxArea)
print(height)
return maxArea