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和微服务架构