接雨水22

给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。

示例 1:

复制代码
输入: heightMap = [[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]]
输出: 4
解释: 下雨后,雨水将会被上图蓝色的方块中。总的接雨水量为1+2+1=4。

思路:木桶效应,容器能盛多少水由最短的一块木板决定。最外层一圈一定是装不了水的,是最早的木桶,找到最短的那块木板,这块木板往里遍历,就可以得到附近的位置可装多少水。

装好水之后,这块可做新的 "木板" (木板就是visited=True),木板高度为max(当前位置高度,临近最短木板高度)。

遍历 (x,y)周围的 (x,y-1),(x,y+1),(x-1,y),(x+1,y),可以设置一个数组-1,0,1,0,-1 快速遍历,详情见代码。

python 复制代码
import heapq
from typing import List


class Solution:
    def trapRainWater(self, heightMap: List[List[int]]) -> int:
        m,n = len(heightMap), len(heightMap[0])
        visited = [[False] * n for _ in range(m)]
        pq = []
        for i in range(m):
            visited[i][0] = True
            heapq.heappush(pq, (heightMap[i][0], i*n))
            visited[i][-1] = True
            heapq.heappush(pq, (heightMap[i][-1], i*n+n-1))
        for j in range(1, n-1):
            visited[0][j] = True
            heapq.heappush(pq, (heightMap[0][j], j))
            visited[-1][j] = True
            heapq.heappush(pq, (heightMap[-1][j], (m-1)*n+j))

        weiyi=[-1,0,1,0,-1]
        res = 0
        while pq:
            height,nxy=heapq.heappop(pq)
            for k in range(4):
                nx,ny=nxy//n+weiyi[k], nxy%n+weiyi[k+1]
                if nx < m and ny < n and nx>=0 and ny>=0 and not visited[nx][ny]:
                    if heightMap[nx][ny] < height:
                        res += height-heightMap[nx][ny]
                    visited[nx][ny]=True
                    heapq.heappush(pq, (max(height,heightMap[nx][ny]), nx * n + ny))

        return res
相关推荐
Vec‑Jie几秒前
MerchantOps-KBQA 实践(十四):本地运行、性能限制与可验证的交付边界
人工智能·后端·python·flask
无bug代码搬运工2 分钟前
LeetCode 42 接雨水:双指针解法详解
算法·leetcode·职场和发展
bug嘛我经常写14 分钟前
dbf文件UTF-8转GBK编码,以及两编码文件互转
数据库·python
Jasmine_llq15 分钟前
《P13016 [GESP202506 六级] 最大因数》
数据结构·算法
胡耀超17 分钟前
AI出事后,怎么查?——读《AI Forensics》
人工智能·python·数字取证·ai取证·
白狐_79826 分钟前
考研408算法设计题保命策略:链表专题暴力解法精讲(2015 & 2019真题实战)
考研·算法·链表
梦想三三30 分钟前
Python从零实现AI Agent电商客服(Qwen/Ollama+SQLite源码解析)
人工智能·python·sqlite
鹿鹿学长33 分钟前
国赛工业应用数学题:从31省规上工业数据到生产排程,四类高频赛题的破题打法
python·自动化
笨鸟先飞,勤能补拙38 分钟前
密码学深度指南 — SecOps 工程师实战手册
人工智能·vscode·python·安全·github·密码学·visual studio
淼澄研学41 分钟前
PyTorch核心实操:从张量计算到混合精度训练的5个关键步骤
人工智能·pytorch·python