mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-10 20:40:39 +08:00
0042 接雨水添加单调栈go解法
This commit is contained in:
@ -640,8 +640,44 @@ func min(a,b int)int{
|
||||
}
|
||||
```
|
||||
|
||||
单调栈解法
|
||||
```go
|
||||
func trap(height []int) int {
|
||||
if len(height) <= 2 {
|
||||
return 0
|
||||
}
|
||||
st := make([]int, 1, len(height)) // 切片模拟单调栈,st存储的是高度数组下标
|
||||
var res int
|
||||
for i := 1; i < len(height); i++ {
|
||||
if height[i] < height[st[len(st)-1]] {
|
||||
st = append(st, i)
|
||||
} else if height[i] == height[st[len(st)-1]] {
|
||||
st = st[:len(st)-1] // 比较的新元素和栈顶的元素相等,去掉栈中的,入栈新元素下标
|
||||
st = append(st, i)
|
||||
} else {
|
||||
for len(st) != 0 && height[i] > height[st[len(st)-1]] {
|
||||
top := st[len(st)-1]
|
||||
st = st[:len(st)-1]
|
||||
if len(st) != 0 {
|
||||
tmp := (min(height[i], height[st[len(st)-1]]) - height[top]) * (i - st[len(st)-1] - 1)
|
||||
res += tmp
|
||||
}
|
||||
}
|
||||
st = append(st, i)
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
|
||||
func min(x, y int) int {
|
||||
if x >= y {
|
||||
return y
|
||||
}
|
||||
return x
|
||||
}
|
||||
```
|
||||
|
||||
### JavaScript:
|
||||
|
||||
```javascript
|
||||
|
Reference in New Issue
Block a user