leetcode 912 golang多种排序
这道题目的意思是,给定一个数组代表一个直方图,求最多能接到多少单位的雨水。
下面是用 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` 记录当前的最高值,然后每次比较两边的最大值,如果左边的最大值小于右边的最大值,则从左边开始扫描,否则从右边开始扫描。
在扫描的过程中,如果当前的高度小于最大值,则可以接到雨水,否则就更新最大值。
希望这个代码能帮到你!