(算法)Trapping Rain Water I
题目:
Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.
For example,
Given [0,1,0,2,1,0,1,3,2,1,2,1]
, return 6
.
思路:
题目的意思是说,给定一非负的整数数组,数组的每个数字表示柱子的高度,如果把这些柱子组成一个容器,最多能盛多少水?
思路是这样的,每个柱子(高度为h)所在的位置能够装的水的容量取决于它前面所有柱子的最高高度preHeight以及它后面所有柱子的最高高度postHeight,
即装水的容量等于max(0,min(preHeight-postHeight)-h);
因此可以通过计算给定数组的前缀数组的最大值(如preMax[i]表示数组从0到i-1位置的最大值);以及后缀数组的最大值(如postMax[i]表示数组从i到n-1位置的最大值),就可以利用上面的公式计算每个位置的水容量,最后加起来就是总共的容量。
代码:
#include<iostream> #include<vector> #include<stdlib.h>using namespace std;int MaxTrappingWater(const vector<int> &water){int sz=water.size();vector<int> preMaxWater(sz);preMaxWater[0]=0;for(int i=1;i<sz;i++){if(water[i]>preMaxWater[i-1])preMaxWater[i]=water[i];elsepreMaxWater[i]=preMaxWater[i-1];}vector<int> sufMaxWater(sz);sufMaxWater[sz-1]=0;for(int i=sz-2;i>=0;i--){if(water[i]>sufMaxWater[i+1])sufMaxWater[i]=water[i];elsesufMaxWater[i]=sufMaxWater[i+1];}int sum=0;for(int i=0;i<sz;i++){sum+=max(0,min(preMaxWater[i],sufMaxWater[i])-water[i]);} return sum; }int main(){int n;while(cin>>n){vector<int> water(n,0);for(int i=0;i<n;i++)cin>>water[i];cout << MaxTrappingWater(water) <<endl;}return 0; }
转载于:https://www.cnblogs.com/AndyJee/p/4821590.html
(算法)Trapping Rain Water I相关推荐
- leetcode#42 Trapping rain water的五种解法详解
leetcode#42 Trapping rain water 这道题十分有意思,可以用很多方法做出来,每种方法的思想都值得让人细细体会. 42. Trapping Rain Water Given ...
- 【重点:DP 双指针 栈】LeetCode 42. Trapping Rain Water
LeetCode 42. Trapping Rain Water 本博客转载自:http://www.cnblogs.com/grandyang/p/4402392.html [自己又不会做,抄的-& ...
- LeetCode 42. Trapping Rain Water 【两种解法】(python排序遍历,C++ STL map存索引,时间复杂度O(nlogn))
LeetCode 42. Trapping Rain Water Python解法 解题思路: 本思路需找到最高点左右遍历,时间复杂度O(nlogn),以下为向左遍历的过程. 将每一个点的高度和索引存 ...
- Leetcode 动态规划 Trapping Rain Water
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie Trapping Rain Water Total Accepted: 14568 Tota ...
- 【重点:BFS】LeetCode 407. Trapping Rain Water II
LeetCode 407. Trapping Rain Water II 博客转载自:http://www.cnblogs.com/grandyang/p/5928987.html [太难了,被智商碾 ...
- LeetCode 42 Trapping Rain Water 收集雨水
LeetCode 42 Trapping Rain Water 收集雨水 Given n non-negative integers representing an elevation map whe ...
- Leetcode 407. Trapping Rain Water II 收集雨水2 解题报告
1 解题思想 我看了下题目,发现比预想中的简单,加之我比较烂,所以其实我还是没做,只是看懂了上回贴的代码,然后做了一下注释,现在我来讲下题目. 首先请看下上一题,上一题是2D的这题是3D的: Leet ...
- LeetCode42. Trapping Rain Water
LeetCode42. Trapping Rain Water 原题地址 题目描述 Given n non-negative integers representing an elevation ma ...
- [leetcode]Trapping Rain Water @ Python
原题地址:https://oj.leetcode.com/problems/trapping-rain-water/ 题意: Given n non-negative integers represe ...
- 【leetcode】42. Trapping Rain Water 计算坑洼地的积水量
1. 题目 Given n non-negative integers representing an elevation map where the width of each bar is 1, ...
最新文章
- phantomjs学习资料
- 常用Redis命令总结
- 坑:pytest 运行报错unknown hook 'pytest_namespace' in plugin module 'allure.pytest_plugin'
- Kotlin入门(7)循环语句的操作
- 电信移动联通广电喜提5G牌照,5G手机明年爆发
- 你是我心中永远抹不掉的痛
- 人是中国开源产业发展的战略制高点
- 指令级并行——超标量Superscalar与超长指令字VLIW架构
- SHOPEX网店系统测试,50万家网站的安全令人担忧
- 安装xdg-open
- python项目简历内容-python编程工程师简历模板范文
- 一、Python-劳务报酬计算器(新手练习)
- 【个人博客】Astro 快速搭建个人博客
- 经济学人信息部:2012年大数据研究报告:商业领袖们的经验
- 网站可访问性:ARIA入门
- AVC/H264格式压缩编码原理
- bootice添加linux引导,bootice怎么添加win10引导_网站服务器运行维护
- 实名认证接口 实名制API
- 学习安卓开发!我凭什么拿到了阿里、腾讯、今日头条3家大厂offer?再不刷题就晚了!
- 微软ERP:“狼”也,“羊”也?
热门文章
- java 条码识别_条码识别示例代码
- stm32 薄膜键盘原理_市面上的笔记本键盘优缺点解析,看完秒懂
- java数组交集_java数组的交集和并集
- 建模步骤_古建设计 | sketchup建模步骤教程(简易入门版)
- STM32F1笔记(六)独立看门狗IWDG
- 160 - 44 defiler.1.exe
- 【C++ grammar】nullptr and Dynamic Memory Allocation (空指针和动态内存分配)
- Java BigDecimal plus()方法与示例
- uva 12589——Learning Vector
- LeetCode 20. 有效的括号 golang(三)