题目描述
给定 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
解法
暴力双指针解法(还没优化)
思路:一行一行数呗,雨水就是两边当着时,中间存在的空隙,就是这么数很多重复
优化思路:
1、在计算最大高度的时候做,这个时候,我们可以通过哈希的方式,记录不同的值第一次出现是在什么位置的相关索引,节省我们while遍历的时间。
2、也是在计算最大高度的时候做,顺便得到数组最大最小值的范围。
class Solution:def trap(self, height: List[int]) -> int:l = len(height)max_n = max(height)cur_sum = 0for i in range(1,max_n+1):left = 0right = l-1while height[left] < i and left < right:left += 1while height[right] < i and left < right:right -= 1for j in range(left,right):if height[j] < i:cur_sum += 1return cur_sum
其他解法待更新,= =