题目描述: (注.input()输入函数的括号中不允许添加任何信息) 编程实现: 工人砌了一面奇特的砖墙,该墙由N列砖组成(1≤N≤106),且每列砖的数量 为Ki(1≤Ki≤104,相邻两列砖之间无缝隙),每块砖的长宽高都为1。 小蓝为了美化这面墙,需要在这面墙中找到一块面积最大的矩形用于涂鸦,那么 请你帮助小蓝找出最大矩形,并输出其面积。 例如:N =6,表示这面墙有6列,每列砖的数量依次为3、2、1、5、6、2,如 下图: 3 2 图中虚线部分是一块面积最大的矩形,其面积为10。
时间: 2024-02-13 18:06:11 浏览: 304
以下是 Python 3 的代码实现:
```python
n = int(input())
heights = list(map(int, input().split())) + [0] # 将最后一列高度设为0,保证最后能计算完所有矩形的面积
stack = [-1] # 栈中存放每列的下标,初始时存放-1
ans = 0 # 最大矩形面积的初始值
for i in range(n+1):
while heights[i] < heights[stack[-1]]: # 如果当前列高度小于栈顶列高度,则弹出栈顶列
h = heights[stack.pop()] # 弹出的列的高度
w = i - stack[-1] - 1 # 弹出的列和栈顶列之间的距离即为该矩形的宽度
ans = max(ans, h*w) # 计算该矩形的面积并更新最大矩形面积
stack.append(i) # 将当前列的下标压入栈中
print(ans)
```
算法的核心是使用单调栈来维护当前所有高度递增的列。具体地,使用一个栈来存储每列的下标,初始时栈中存放-1。从左到右遍历每列,如果当前列高度小于栈顶列高度,则弹出栈顶列,计算该矩形的面积并更新最大矩形面积;否则将当前列的下标压入栈中。最后需要额外在列表末尾添加一个高度为0的列,保证最后能计算完所有矩形的面积。
阅读全文