题目描述:

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

例如:heightMap = [[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]] 时表示的情形如下图,最多接到的雨水体积为4。

解法:

模拟雨水的流失,先将所有格子上都放上雨水,使得所有格子的“地基”加雨水的高度相同。(边缘一圈和地基最高的格子上不放雨水)

然后多次遍历中间的格子(除去边缘一圈的格子),如果这个格子(i, j)有雨水,并且其上下左右四个格子中有一个的总高度(地基+雨水)低于这个格子(i, j)的总高度,则减少格子(i, j)的雨水数,要么到0,要么总高度等于上面找到的最低的邻格总高度。

如果某次遍历没有发生雨水的变化,则遍历完成。统计剩下的雨水数即可。

代码如下:

public class Solution {// 获取 [ii][jj] 四周最高的高度public static int highest(int[][] heightMap, int m, int n){int max = heightMap[0][0];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if(heightMap[i][j] > max)max = heightMap[i][j];}}return max;}// 获取四个数中的最小值public static int min(int a, int b, int c, int d){int mini = a;if(b < mini)mini = b;if(c < mini)mini = c;if(d < mini)mini = d;return mini;}// 获取 [ii][jj] 四周包括雨水最低的高度public static int lowest(int[][] heightMap, int rain[][], int ii, int jj){int a = heightMap[ii-1][jj] + rain[ii-1][jj];int b = heightMap[ii+1][jj] + rain[ii+1][jj];int c = heightMap[ii][jj-1] + rain[ii][jj-1];int d = heightMap[ii][jj+1] + rain[ii][jj+1];return min(a, b, c, d);}public static void print_rain(int[][] rain, int m, int n){for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {System.out.printf("%d ", rain[i][j]);}System.out.println();}System.out.println();}public int trapRainWater(int[][] heightMap) {int m = heightMap.length;int n = heightMap[0].length;if(m <= 2 || n <= 2)return 0;// m > 2 and n > 2int[][] rain = new int[m][n];// 先尽可能多的装雨,元素值为雨水高度,不包括地基int max_height = highest(heightMap, m, n);for(int i=1; i<m-1; i++)for(int j=1; j<n-1; j++)rain[i][j] = max_height - heightMap[i][j];boolean changed;int temp;do{changed = false;for(int i=1; i<m-1; i++){for(int j=1; j<n-1; j++){if( rain[i][j] > 0 ){temp = lowest(heightMap, rain, i, j);if(temp < rain[i][j]+heightMap[i][j]){changed = true;if(heightMap[i][j] >= temp){rain[i][j] = 0;}else {rain[i][j] = temp - heightMap[i][j];}}}}}} while (changed);int ret = 0;for(int i=1; i<m-1; i++){for(int j=1; j<n-1; j++) {ret += rain[i][j];}}return ret;}
}

2021-11-03接雨水II相关推荐

  1. 【财经期刊FM-Radio|2021年03月01日】

    title: [财经期刊FM-Radio|2021年03月01日] 微信公众号: 张良信息咨询服务工作室 [今日热点新闻一览↓↓] 2月份中国制造业PMI季节性回落,经济仍保持稳定恢复势头 茅台集团去 ...

  2. 【财经期刊FM-Radio|2021年03月04日】

    title: [财经期刊FM-Radio|2021年03月04日] 微信公众号: 张良信息咨询服务工作室 [今日热点新闻一览↓↓] 科技股拖累纳指跌超2%,ARKK跌入熊市,美债收益率又猛升,美国5年 ...

  3. 【财经期刊FM-Radio|2021年03月29日】

    title: [财经期刊FM-Radio|2021年03月29日] 微信公众号: 张良信息咨询服务工作室 [今日热点新闻一览↓↓] 北京时间周一亚洲早盘,美股期货和原油期货小幅走低. 低基数叠加&qu ...

  4. 【财经期刊FM-Radio|2021年03月03日】

    title: [财经期刊FM-Radio|2021年03月03日] 微信公众号: 张良信息咨询服务工作室 [今日热点新闻一览↓↓] 科技股拖累美股回落,电动车股大跌,蔚来小鹏跌超10%,芯片股下挫,金 ...

  5. 2021/11/07-2021/11/11

    # -*- coding = utf-8 -*- # @Time:2021/11/7 16:09 # @Author:zhangchuhan # @File:demo01.py # @Software ...

  6. 【Yolov5】1.认真总结6000字Yolov5保姆级教程(旧版本2021.08.03作为备份)

    旧版本2021.08.03 新版本https://blog.csdn.net/m0_53392188/article/details/119334634​​​​​​​ 以作备份 目录 一.前言 二.学 ...

  7. 史上最详细微信小程序授权登录与后端SprIngBoot交互操作说明,附源代码,有疑惑大家可以直接留言,蟹蟹 2021.11.29完善更新小程序代码,

    2021.11.29 更新文章 你好,我是博主宁在春,一起学习吧!!! 写这篇文章的原因,主要是因为最近在写毕业设计,用到了小程序,这中间曲曲折折,一言难尽啊.毕业设计真的让人麻脑阔

  8. 读论文——Pre-Training with Whole Word Masking for Chinese BERT(2021 11.25)

    第一遍 标题以及作者(2021 11.25) 摘要 本文基于BERT,在RoBERTa上进行一系列改进,提出了用于中文的预训练模型MacBERT. 提出了一种新的掩码策略,MLM as correct ...

  9. 首页推荐流支持快捷修改兴趣标签,问答支持展示gif【2021.11.8】

    hello,大家好,这里是「CSDN产品周报」第17期.本次更新主要涉及首页和问答两个产品模块,具体细节请往下看. 一.首页优化 1.「推荐」信息流新增「修改兴趣标签」按钮 从用户需求的角度考虑,对内 ...

  10. 【报告分享】小红书平台2021 11.11期间行业投放分析报告-千瓜数据(附下载)

    摘要:随着平台多元化发展,用户体量增加,小红书逐渐拥抱了更多的年轻用户群体,也给更多的品牌带来了增长机会.据小红书方透露,2021年小红书平台的单日笔记曝光已经超100亿次,且男性用户占比已经达到了3 ...

最新文章

  1. ProgressDialog用法详解
  2. vary渲染图没了_云渲染哪个好用?云渲染平台对比
  3. anaconda怎么运行python程序-致Python初学者 Anaconda入门使用指南完整版
  4. 启明云端分享|直接用ESP32-S2和ESP32-C3驱动1.54寸串口屏,有哪些区别呢,他们的亮点又有哪些呢
  5. C++ 获取本机登陆过的QQ号码
  6. Android Retrofit 2.0 使用-补充篇
  7. libfetion的使用
  8. 会计学原理与财务报表分析
  9. 4G升级5G需要换手机还是换手机卡,还是都不用换?
  10. 手机无线访问计算机文件夹,电脑怎么通过无线wifi读取手机文件
  11. 左神算法基础class6—题目2宽度优先遍历和深度优先遍历
  12. 万丈高楼平地起,开始给Java打地基
  13. Android-小游戏
  14. 虚拟机可以做成存储服务器吗,利用win10自带虚拟机功能轻松打造家用nas
  15. xctf攻防世界 MISC高手进阶区 Banmabanma
  16. VSTO PPT图表对象的操作(2)
  17. 三维坐标点绕任意轴旋转的新坐标计算
  18. Web应用程序与桌面应用程序的区别
  19. 免费空间2015大主机免费的时代
  20. 计算机重启后无法连接网络,路由器重启后电脑无法联网怎么办?有什么解决方法...

热门文章

  1. 2023河南土著双非硕士——毕业季秋招春招就业经验分享(仅限于在河南找工作,毕业想留河南)
  2. 笔记本电脑文件丢失还能恢复吗
  3. php html不转义字符,避免PHP中的HTML转义字符
  4. 射频电路与天线(华南理工金品公开课)学习笔记--绪论
  5. 如何拯救一台老旧的笔记本电脑?看完文章瞬间就明白了
  6. 基于LDA对关注的微博用户进行聚类
  7. Java乐图下载_Java平台乐图导航地图测评:实时跟踪是亮点
  8. Flink基础系列20-数据重分区操作
  9. python爬虫之 requests库的使用
  10. 简单工厂和工厂方法模式(附简单实例)