ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

二维接雨水

2022-06-20 16:01:18  阅读:131  来源: 互联网

标签:heightMap nx int range 雨水 water ny 二维


 

 

https://leetcode.cn/problems/trapping-rain-water-ii/

 

 

 

func trapRainWater(heightMap [][]int) int {
    m, n := len(heightMap), len(heightMap[0])
    maxHeight := 0
    for _, row := range heightMap {//找到最高的格子
        for _, h := range row {
            maxHeight = max(maxHeight, h)
        }
    }

    water := make([][]int,m)
    for i := range water {//初始化每个位置的高度都为最大
        water[i] = make([]int, n)
        for j := range water[i] {
            water[i][j] = maxHeight
        }
    }
    type xy struct{ x, y int }
    q := []xy{} //bfs队列
    for i := range heightMap {
        for j:= range heightMap[i] {
            if (i == 0 || i == m-1 || j == 0 || j == n-1) && heightMap[i][j] < water[i][j] {
                water[i][j] = heightMap[i][j]//最外层方块不能接水
                q = append(q, xy{i, j}) //bfs入口,从最外层开始搜索
            }
        }
    }

    dirs := []int{-1, 0, 1, 0, -1}//四方向搜索
    for len(q) > 0 {
        p := q[0]
        q = q[1:]
        x, y := p.x, p.y
        for i := 0; i < 4; i++ {
            nx, ny := x+dirs[i], y+dirs[i+1]
            //1、位置合法 2、搜索位置比当前维护的最大高度要高 3、搜索位置比当前位置要高
            if 0 <= nx && nx < m && 0 <= ny && ny < n && water[nx][ny] > water[x][y] && water[nx][ny] > heightMap[nx][ny] {
                water[nx][ny] = max(water[x][y], heightMap[nx][ny])
                q = append(q, xy{nx, ny})
            }
        }
    }
    ans:=0
    for i := range heightMap {
        for j := range heightMap[i] {
            ans += water[i][j] - heightMap[i][j]
        }
    }
    return ans
}


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

 

标签:heightMap,nx,int,range,雨水,water,ny,二维
来源: https://www.cnblogs.com/-citywall123/p/16393497.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有