mirror of
https://github.com/chefyuan/algorithm-base.git
synced 2025-08-17 03:11:32 +00:00
添加Go语言题解
This commit is contained in:
@@ -117,4 +117,35 @@ class Solution {
|
||||
}
|
||||
```
|
||||
|
||||
GO Code:
|
||||
|
||||
```go
|
||||
func trap(height []int) int {
|
||||
stack := []int{}
|
||||
water := 0
|
||||
// 最左边部分不会接雨水,左边持续升高时,stack都会弹出所有元素。
|
||||
for i := 0; i< len(height); i++ {
|
||||
for len(stack) != 0 && height[i] > height[stack[len(stack) - 1]] {
|
||||
popnum := stack[len(stack) - 1]
|
||||
// 出现相同高度的情况(其实也可以不用处理,如果不处理,相同高度时后面的hig为0,会产生很多无效的计算)
|
||||
for len(stack) != 0 && height[popnum] == height[stack[len(stack) - 1]] {
|
||||
stack = stack[:len(stack) - 1]
|
||||
}
|
||||
if len(stack) == 0 { break }
|
||||
le, ri := stack[len(stack) - 1], i
|
||||
hig := min(height[ri], height[le]) - height[popnum]
|
||||
wid := ri - le - 1
|
||||
water += wid * hig
|
||||
}
|
||||
stack = append(stack, i)
|
||||
}
|
||||
return water
|
||||
}
|
||||
|
||||
func min(a, b int) int {
|
||||
if a < b { return a }
|
||||
return b
|
||||
}
|
||||
```
|
||||
|
||||
###
|
||||
|
Reference in New Issue
Block a user