mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
添加 0042.接雨水 Go版本的单调栈压缩版解法
This commit is contained in:
@ -704,6 +704,45 @@ func min(x, y int) int {
|
||||
}
|
||||
```
|
||||
|
||||
单调栈压缩版:
|
||||
|
||||
```go
|
||||
func trap(height []int) int {
|
||||
stack := make([]int, 0)
|
||||
res := 0
|
||||
|
||||
// 无需事先将第一个柱子的坐标入栈,因为它会在该for循环的最后入栈
|
||||
for i := 0; i < len(height); i ++ {
|
||||
// 满足栈不为空并且当前柱子高度大于栈顶对应的柱子高度的情况时
|
||||
for len(stack) > 0 && height[stack[len(stack) - 1]] < height[i] {
|
||||
// 获得凹槽高度
|
||||
mid := height[stack[len(stack) - 1]]
|
||||
// 凹槽坐标出栈
|
||||
stack = stack[: len(stack) - 1]
|
||||
|
||||
// 如果栈不为空则此时栈顶元素为左侧柱子坐标
|
||||
if len(stack) > 0 {
|
||||
// 求得雨水高度
|
||||
h := min(height[i], height[stack[len(stack) - 1]]) - mid
|
||||
// 求得雨水宽度
|
||||
w := i - stack[len(stack) - 1] - 1
|
||||
res += h * w
|
||||
}
|
||||
}
|
||||
// 如果栈为空或者当前柱子高度小于等于栈顶对应的柱子高度时入栈
|
||||
stack = append(stack, i)
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
func min(x, y int) int {
|
||||
if x < y {
|
||||
return x
|
||||
}
|
||||
return y
|
||||
}
|
||||
```
|
||||
|
||||
### JavaScript:
|
||||
|
||||
```javascript
|
||||
|
Reference in New Issue
Block a user