当前位置: 首页 > article >正文

C++ | Leetcode C++题解之第407题接雨水II

题目:

题解:

class Solution {
public:
    int trapRainWater(vector<vector<int>>& heightMap) {
        int m = heightMap.size(), n = heightMap[0].size();
        int maxHeight = 0;
        int dirs[] = {-1, 0, 1, 0, -1};

        for (int i = 0; i < m; ++i) {
            maxHeight = max(maxHeight, *max_element(heightMap[i].begin(), heightMap[i].end()));
        }
        vector<vector<int>> water(m, vector<int>(n, maxHeight));
        queue<pair<int,int>> qu;
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (i == 0 || i == m - 1 || j == 0 || j == n - 1) {
                    if (water[i][j] > heightMap[i][j]) {
                        water[i][j] = heightMap[i][j];
                        qu.push(make_pair(i, j));
                    }
                }
            }
        }        
        while (!qu.empty()) {
            int x = qu.front().first, y = qu.front().second;
            qu.pop();
            for (int i = 0; i < 4; ++i) {
                int nx = x + dirs[i], ny = y + dirs[i + 1];
                if (nx < 0 || nx >= m || ny < 0 || ny >= n) {
                    continue;
                }
                if (water[x][y] < water[nx][ny] && water[nx][ny] > heightMap[nx][ny]) {
                    water[nx][ny] = max(water[x][y], heightMap[nx][ny]);
                    qu.push(make_pair(nx, ny));
                }
            }
        }

        int res = 0;
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                res += water[i][j] - heightMap[i][j];
            }
        }
        return res;
    }
};

http://www.kler.cn/a/312631.html

相关文章:

  • sql专题 之 sql的执行顺序
  • PHP API如何使用access_token开放接口有效期
  • mysql 快速解决死锁方式
  • Golang常见编码
  • 力扣--树题总结
  • 【信号处理】基于联合图像表示的深度学习卷积神经网络
  • Windows下SDL2创建最简单的一个窗口
  • 华为昇腾服务器+Atlas300IPro*2 部署Dify+MindIE+Embedding+Rerank实现Qwen2.5-7B全国产化的大模型推理平台
  • stm32f411ceu6芯片学习
  • CSP-J 算法基础 归并排序
  • VideoPlayer插件的用法
  • 初体验《SpringCloud 核心组件Eureka》
  • 栈的各种接口的实现(C)
  • 软设9.20
  • 828华为云征文|基于华为云Flexus X实例快速搭建Halo博客平台
  • 后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0916)
  • 基于SSM+Vue+MySQL的家教服务管理系统
  • Spring Boot中使用注解拦截器实现通用校验器和基于角色的权限注解
  • CSS 笔记 1
  • 小琳AI课堂:MASS模型——革新自然语言处理的预训练技术
  • celery
  • 鸿蒙生态应用
  • 网关登录校验(2)----网关如何将用户信息传递给微服务
  • 金钥匙系列:Kubernetes (K8s) 服务集群技术栈学习路线
  • 表单里面input的type属性值有哪些?
  • CCF201909_1