给定一组非负整数组成的数组h,代表一组柱状图的高度,其中每个柱子的宽度都为1。 在这组柱状图中找到能组成的最大矩形的面积(如图所示)。 入参h为一个整型数组,代表每个柱子的高度,返回面积的值。
输入描述:
输入包括两行,第一行包含一个整数n(1 ≤ n ≤ 10000)
第二行包括n个整数,表示h数组中的每个值,h_i(1 ≤ h_i ≤ 1,000,000)
输出描述:
输出一个整数,表示最大的矩阵面积。
输入例子:
6
2 1 5 6 2 3
输出例子: 10
2.代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
# 输入值
num = 6
list = [2, 1, 5, 6, 2, 3]
if num != len(list):
print('Input ERROR!')
area = []
for n in range(1, num+1):
print('.............cishu..............', n, '\njuxing_height', list[n-1])
kuan = 1
break_flag_left = False
break_flag_right = False
while break_flag_left == False:
if n <= 1:
break_flag_left = True
else:
for i in range(num):
if n-i <= 1:
break_flag_left = True
elif list[n-i-2] >= list[n-1]:
kuan += 1
else:
break_flag_left = True
print('left_kuan: ', kuan-1)
while break_flag_right == False:
if n >= num:
break_flag_right = True
else:
for i in range(num):
if n+i >= num:
break_flag_right = True
elif list[n-1] <= list[n+i]:
kuan += 1
else:
break_flag_right = True
print('sum_kuan: ', kuan, '\narea = ', list[n-1]*kuan)
area.append(list[n-1]*kuan)
print(area, '\n', max(area))
3.结果
.............cishu.............. 1
juxing_height 2
left_kuan: 0
sum_kuan: 5
area = 10
.............cishu.............. 2
juxing_height 1
left_kuan: 1
sum_kuan: 6
area = 6
.............cishu.............. 3
juxing_height 5
left_kuan: 0
sum_kuan: 2
area = 10
.............cishu.............. 4
juxing_height 6
left_kuan: 0
sum_kuan: 1
area = 6
.............cishu.............. 5
juxing_height 2
left_kuan: 3
sum_kuan: 5
area = 10
.............cishu.............. 6
juxing_height 3
left_kuan: 2
sum_kuan: 3
area = 9
[10, 6, 10, 6, 10, 9]
10