mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-11 13:00:22 +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:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
|
Reference in New Issue
Block a user