给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
def calculate(self,_m_list,k):
num = []
n = 0
if k == 0:
for i in range(len(_m_list)):
n = n + _m_list[i][1]
num.append(_m_list[i][0]*n)
return max(num)
else:
for j in range(len(_m_list)):
i = len(_m_list) - j - 1
n = n + _m_list[i][1]
num.append(_m_list[i][0]*n)
return max(num)
def largestRectangleArea(self, heights):
"""
:type heights: List[int]
:rtype: int
"""
state = []
m_list = []
flag = 0
answer = 0
for _ in heights:
if len(state) == 0:
state.append([_,1])
elif state[-1][0]<_:
state.append([_,1])
elif state[-1][0] == _:
state[-1][1] +=1
else:
num = 0
while 1:
if state == []:
flag = self.calculate(m_list,0)
if flag >answer:
answer = flag
print(m_list,answer)
m_list = []
state.append([_,1+num])
break
elif state[-1][0] <= _:
flag = self.calculate(m_list,0)
if flag >answer:
answer = flag
m_list = []
if state[-1][0]<_:
state.append([_,1+num])
elif state[-1][0] == _:
state[-1][1] +=1+num
break
else:
val = state.pop()
m_list.append(val)
num += val[1]
flag = self.calculate(state,1)
if flag >answer:
answer = flag
return answer