这道题目的意思是,给定一个数组代表一个直方图,求最多能接到多少单位的雨水。 下面是用 Go 语言实现的代码: ``` func trap(height []int) int { n := len(height) if n == 0 { return 0 } // 初始化左边界和右边界 left, right := 0, n-1 leftMax, rightMax := height[0], height[n-1] result := 0 for left < right { if height[left] < height[right] { left++ if leftMax > height[left] { result += leftMax - height[left] } else { leftMax = height[left] } } else { right-- if rightMax > height[right] { result += rightMax - height[right] } else { rightMax = height[right] } } } return result } ``` 思路:使用双指针法,从两边向中间扫描。由于雨水只能接在最低的那一侧,所以我们可以使用两个变量 `leftMax` 和 `rightMax` 记录当前的最高值,然后每次比较两边的最大值,如果左边的最大值小于右边的最大值,则从左边开始扫描,否则从右边开始扫描。 在扫描的过程中,如果当前的高度小于最大值,则可以接到雨水,否则就更新最大值。 希望这个代码能帮到你!