1、题目
2、题解
看完题目后,脑海中可能的解法过了好几遍,感觉实现起来都过于复杂,到底是放弃了,直奔官方答案,看完答案只能说人家的解法好有智慧😭。因为自己动态规划使用不太熟练,所以决定采用动态规划的方法编码,但这个动态规划不太一样。
1)对所给的height数组分别左右遍历,找到当前位置柱子的左右最高柱子分别记录在leftMax和rightMax中。
2)可通过如下方式得到当前柱子所处位置的盛水量。
实现代码如下
func trap(height []int) int {
n := len(height)
all := 0
if n == 0{
return 0
}else{
leftMax, rightMax := make([]int, n), make([]int, n)
leftMax[0] = height[0]
for i:=1; i<n; i++{
leftMax[i]=getMax(height[i], leftMax[i-1])
}
rightMax[n-1] = height[n-1]
for i:=n-2; i>=0; i--{
rightMax[i]=getMax(height[i], rightMax[i+1])
}
// fmt.Println(leftMax, rightMax)
for i:=0; i<n; i++{
all += getMin(leftMax[i], rightMax[i])-height[i]
}
return all
}
}
func getMin(a, b int) int {
if a<=b {
return a
}else {
return b
}
}
func getMax(a, b int) int {
if a>=b {
return a
}else {
return b
}
}