牛客网: BM94
题目: 把数组看成柱子高度图,计算最多能接多少雨水
思路: 初始化左右双指针left, right = 0, n-1, 初始化高度maxL, maxR,比较maxL与maxR,较小的往对面移动,更新maxL或maxR, 同时统计柱子高度差即为可接雨水数;循环至不再满足left < right停止
代码:
- // go
-
- package main
- // import "fmt"
-
- /**
- * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
- *
- * max water
- * @param arr int整型一维数组 the array
- * @return long长整型
- */
- func max(x, y int) int {
- if x > y {return x} else {return y}
- }
- func maxWater( arr []int ) int64 {
- // write code here
- if len(arr) < 2 {
- return 0
- }
- res := 0
- left, right := 0, len(arr) - 1
- maxL, maxR := arr[left], arr[right]
- for left < right {
- if arr[left] < arr[right] {
- maxL = max(maxL, arr[left])
- res += maxL - arr[left]
- left++
- } else {
- maxR = max(maxR, arr[right])
- res += maxR - arr[right]
- right--
- }
- }
- return int64(res)
- }