算法 接雨水问题-(双指针)

牛客网: 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)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值