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
} 
相关推荐
永远睡不够的入17 分钟前
直接插入排序、希尔排序、选择排序
数据结构·算法·排序算法
历程里程碑19 分钟前
hot 206
java·开发语言·数据结构·c++·python·算法·排序算法
Tipriest_39 分钟前
C++ 的 ranges 和 Python 的 bisect 在二分查找中的应用与实现
c++·python·算法·二分法
晨晖22 小时前
顺序查找:c语言
c语言·开发语言·算法
LYFlied2 小时前
【每日算法】LeetCode 64. 最小路径和(多维动态规划)
数据结构·算法·leetcode·动态规划
Salt_07282 小时前
DAY44 简单 CNN
python·深度学习·神经网络·算法·机器学习·计算机视觉·cnn
货拉拉技术2 小时前
AI拍货选车,开启拉货新体验
算法
ServBay3 小时前
掌握这9个GO技巧,代码高效又高能
后端·go
MobotStone3 小时前
一夜蒸发1000亿美元后,Google用什么夺回AI王座
算法
Wang201220133 小时前
RNN和LSTM对比
人工智能·算法·架构