42. 接雨水

思路

这题关键在于每个地方接的水为左边最大和右边最大的最小值减去这个地方的高度。还需要注意的一个地方在于两边作为边界的地方是不会接水的。

这里我用动态规划的方式记录当前位置左边最大和右边最大的值。这里需要注意的一个点是如果左边没有比当前位置大的当前位置应该赋值为多少?这里直接赋值为当前高度值,因为最后会取两边大值的最小值减去当前值。(如果填了本身之后,右边也会出现两种情况,如果右边有比这个大的值,那就不影响最终值,如果右边没有比这个大的值的话,也会为其赋值为本身的高度,不影响最后结果的计算)

代码示例

go 复制代码
func trap(height []int) int {
    result:=0
    leftBig:=make([]int,len(height))
    rightBig:=make([]int,len(height))


    for i:=1;i<len(height);i++{
        leftBig[i]=max(  height[i],max(leftBig[i-1],height[i-1])  )
    }

    for i:=len(height)-2;i>=0;i--{
        rightBig[i]=max(height[i],max(rightBig[i+1],height[i+1]))
    }

    for i:=0;i<len(height);i++{
        if i==0 || i==len(height)-1{
            continue
        }
        result+=min(leftBig[i],rightBig[i])-height[i]
    }

    return result
}

func max(a,b int)int{
    if a>b{
        return a
    }
    return b
}

func min(a,b int)int{
    if a<b{
        return a
    }
    return b
} 
相关推荐
凌波粒12 分钟前
LeetCode--704.二分查找(数组)
算法·leetcode·职场和发展
xiaoye-duck13 分钟前
《算法题讲解指南:动态规划算法--路径问题》--11.按摩师,12.打家劫舍II
c++·算法·动态规划
代码探秘者19 分钟前
【算法篇】1.双指针
java·数据结构·人工智能·后端·python·算法
qq_4176950523 分钟前
C++中的中介者模式
开发语言·c++·算法
像素猎人33 分钟前
pair<类型1, 类型2> 变量名的介绍,自用笔记
开发语言·c++·算法
向往着的青绿色34 分钟前
完全平方数【Letcode279题解】
开发语言·c++·数学·算法·面试·性能优化·动态规划
手握风云-36 分钟前
优选算法的后进之道:栈专题
算法
xwz小王子37 分钟前
Science Robotics 赋予机器人“类脑”触觉,低成本视觉-触觉预训练攻克灵巧手多任务操作
人工智能·算法·机器人
Vect__39 分钟前
记录3.20和3.21做过的一些力扣的思考
linux·算法·leetcode
qq_3585896141 分钟前
sylar 配置系统
java·c++·算法