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
} 
相关推荐
学编程的小程4 小时前
LeetCode216
算法·深度优先
leeyayai_xixihah4 小时前
2.21力扣-回溯组合
算法·leetcode·职场和发展
01_4 小时前
力扣hot100——相交,回文链表
算法·leetcode·链表·双指针
萌の鱼4 小时前
leetcode 2826. 将三个组排序
数据结构·c++·算法·leetcode
Buling_04 小时前
算法-哈希表篇08-四数之和
数据结构·算法·散列表
AllowM4 小时前
【LeetCode Hot100】除自身以外数组的乘积|左右乘积列表,Java实现!图解+代码,小白也能秒懂!
java·算法·leetcode
RAN_PAND5 小时前
STL介绍1:vector、pair、string、queue、map
开发语言·c++·算法
fai厅的秃头姐!7 小时前
C语言03
c语言·数据结构·算法
lisanndesu7 小时前
动态规划
算法·动态规划
myprogramc7 小时前
十大排序算法
数据结构·算法·排序算法