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
} 
相关推荐
程序员爱钓鱼9 小时前
Go语言实战案例 — 项目实战篇:简易博客系统(支持评论)
前端·后端·go
NAGNIP1 天前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
郭京京1 天前
go框架gin(中)
后端·go
郭京京1 天前
go框架gin(下)
后端·go
美团技术团队1 天前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
一直_在路上1 天前
Go 语言微服务演进路径:从小型项目到企业级架构
架构·go
Fanxt_Ja1 天前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下1 天前
最终的信号类
开发语言·c++·算法
茉莉玫瑰花茶1 天前
算法 --- 字符串
算法
博笙困了1 天前
AcWing学习——差分
c++·算法