def solution(n, array):
stack = []
max_area = 0
index = 0
while index < n:
# If this bar is higher than the bar at stack top, push it to the stack
if not stack or array[index] >= array[stack[-1]]:
stack.append(index)
index += 1
else:
# Pop the top
top_of_stack = stack.pop()
# Calculate the area with array[top_of_stack] as the smallest (or minimum height) bar
area = (array[top_of_stack] *
((index - stack[-1] - 1) if stack else index))
# Update max area, if needed
max_area = max(max_area, area)
# Now pop the remaining bars from stack and calculate area
while stack:
top_of_stack = stack.pop()
area = (array[top_of_stack] *
((index - stack[-1] - 1) if stack else index))
max_area = max(max_area, area)
return max_area
if __name__ == "__main__":
# Add your test cases here
print(solution(5, [1, 2, 3, 4, 5]) == 9)
最大矩形面积问题
于 2024-11-28 10:11:17 首次发布