题目:

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相关推荐

  1. leetcode#42 Trapping rain water的五种解法详解

    leetcode#42 Trapping rain water 这道题十分有意思,可以用很多方法做出来,每种方法的思想都值得让人细细体会. 42. Trapping Rain Water Given ...

  2. 【重点:DP 双指针 栈】LeetCode 42. Trapping Rain Water

    LeetCode 42. Trapping Rain Water 本博客转载自:http://www.cnblogs.com/grandyang/p/4402392.html [自己又不会做,抄的-& ...

  3. LeetCode 42. Trapping Rain Water 【两种解法】(python排序遍历,C++ STL map存索引,时间复杂度O(nlogn))

    LeetCode 42. Trapping Rain Water Python解法 解题思路: 本思路需找到最高点左右遍历,时间复杂度O(nlogn),以下为向左遍历的过程. 将每一个点的高度和索引存 ...

  4. Leetcode 动态规划 Trapping Rain Water

    本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie Trapping Rain Water Total Accepted: 14568 Tota ...

  5. 【重点:BFS】LeetCode 407. Trapping Rain Water II

    LeetCode 407. Trapping Rain Water II 博客转载自:http://www.cnblogs.com/grandyang/p/5928987.html [太难了,被智商碾 ...

  6. LeetCode 42 Trapping Rain Water 收集雨水

    LeetCode 42 Trapping Rain Water 收集雨水 Given n non-negative integers representing an elevation map whe ...

  7. Leetcode 407. Trapping Rain Water II 收集雨水2 解题报告

    1 解题思想 我看了下题目,发现比预想中的简单,加之我比较烂,所以其实我还是没做,只是看懂了上回贴的代码,然后做了一下注释,现在我来讲下题目. 首先请看下上一题,上一题是2D的这题是3D的: Leet ...

  8. LeetCode42. Trapping Rain Water

    LeetCode42. Trapping Rain Water 原题地址 题目描述 Given n non-negative integers representing an elevation ma ...

  9. [leetcode]Trapping Rain Water @ Python

    原题地址:https://oj.leetcode.com/problems/trapping-rain-water/ 题意: Given n non-negative integers represe ...

  10. 【leetcode】42. Trapping Rain Water 计算坑洼地的积水量

    1. 题目 Given n non-negative integers representing an elevation map where the width of each bar is 1, ...

最新文章

  1. phantomjs学习资料
  2. 常用Redis命令总结
  3. 坑:pytest 运行报错unknown hook 'pytest_namespace' in plugin module 'allure.pytest_plugin'
  4. Kotlin入门(7)循环语句的操作
  5. 电信移动联通广电喜提5G牌照,5G手机明年爆发
  6. 你是我心中永远抹不掉的痛
  7. 人是中国开源产业发展的战略制高点
  8. 指令级并行——超标量Superscalar与超长指令字VLIW架构
  9. SHOPEX网店系统测试,50万家网站的安全令人担忧
  10. 安装xdg-open
  11. python项目简历内容-python编程工程师简历模板范文
  12. 一、Python-劳务报酬计算器(新手练习)
  13. 【个人博客】Astro 快速搭建个人博客
  14. 经济学人信息部:2012年大数据研究报告:商业领袖们的经验
  15. 网站可访问性:ARIA入门
  16. AVC/H264格式压缩编码原理
  17. bootice添加linux引导,bootice怎么添加win10引导_网站服务器运行维护
  18. 实名认证接口 实名制API
  19. 学习安卓开发!我凭什么拿到了阿里、腾讯、今日头条3家大厂offer?再不刷题就晚了!
  20. 微软ERP:“狼”也,“羊”也?

热门文章

  1. java 条码识别_条码识别示例代码
  2. stm32 薄膜键盘原理_市面上的笔记本键盘优缺点解析,看完秒懂
  3. java数组交集_java数组的交集和并集
  4. 建模步骤_古建设计 | sketchup建模步骤教程(简易入门版)
  5. STM32F1笔记(六)独立看门狗IWDG
  6. 160 - 44 defiler.1.exe
  7. 【C++ grammar】nullptr and Dynamic Memory Allocation (空指针和动态内存分配)
  8. Java BigDecimal plus()方法与示例
  9. uva 12589——Learning Vector
  10. LeetCode 20. 有效的括号 golang(三)