# # 经典来袭!LeetCode:42. # # 给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 # # # 示例1: # 输入:height = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1] # 输出:6 # 解释:上面是由数组[0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1] # 表示的高度图,在这种情况下,可以接6个单位的雨水(蓝色部分表示雨水)。 # # 示例2: # 输入:height = [4, 2, 0, 3, 2, 5] # 输出:9 height = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1] def get_area(height): vstack = [0] area = 0 for i in range(1, len(height)): if vstack and height[i] <= height[vstack[-1]]: vstack.append(i) else: while vstack and height[i] > height[vstack[-1]]: temp = vstack[-1] vstack.pop() if vstack: h = min(height[i], height[vstack[-1]])-height[temp] w = i - vstack[-1] - 1 print(h, w) area += w*h vstack.append(i) print(area) get_area(height)
4.单调栈-接雨水.py
于 2023-12-06 21:21:51 首次发布