LeetCode 打卡 Day 25 — 接雨水

本文介绍了如何使用动态规划解决一个基于二维数组的盛水问题。通过左右遍历数组,找到每个位置左右两侧的最高柱子高度,然后计算当前位置的盛水量。博客提供了详细的代码实现,包括动态规划数组的填充和盛水量的计算,展示了如何将复杂问题简化为简洁的算法解决方案。
摘要由CSDN通过智能技术生成

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
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值