go解题答案
- 思路概括:首位双指针像中间遍历计算值
- 思路核心:
1、比较2个指针,左右比低的为端点
2、两个个端点构成一个容器,从左面或者右面(从端点小的一边计算)向两端找容器并计算水量,
3、计算蓄水量:一个容器内,蓄水量=两端中低点-去其他更低的
4、如果找到比端点高的,证明可能又是一个端点,所以需要重新定义端点(步骤1)
func maxWater( arr []int ) int64 {
if len(arr)==0 {
return 0
}
res:=0
left,right:=0,len(arr)-1 // 2个指针代表容器2个端点
for left<right {
min:=arr[left]
if arr[left]>arr[right]{
min= arr[right] // 确定哪边是小端点,作为比较值
}
//这两个for循环在每个大的for只会走一个
for left<right && arr[left]<=min{ //此时左边为小端点
res+=min-arr[left] //端点值-更小的值=蓄水值
left++ // 遍历下一个
}
for left<right && arr[right]<=min{//此时右边为小端点
res+=min-arr[right] //端点值-更小的值=蓄水值
right-- // 遍历下一个
}
}
return int64(res)
}
如果有帮助请点个赞哦, 更多文章请看我的博客
题主背景
- 从业8年——超级内卷500Q技术经理——目前专注go和微服务架构