题目描述:

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.

分析:

    题意:给定n个非负整型数,表示简化版二维高程图的高度,对应的宽度都为1。计算并返回这个二维高程图的蓄水量。

思路:这道题跟LeetCode 11很相似,主要区别如下:① 该题给出的高程图包含二维宽度;② 该题计算的是总体蓄水量,并非选择其中两个高度、得到对应的最大蓄水量。
    我们仍然采用双指针法。初始化指针left = 0、right = n - 1(即指向第一条、最后一条柱),得到两者较短高度min_height。如果指针left右边的柱高度比当前最短高度低,则把两者的高度差加入蓄水量中(因为两边高、中间低才能蓄水),同时指针left右移;同理,如果指针right左边的柱高度比当前最短高度低,把两者的高度差加入蓄水量中,指针right左移。直到指针left、right相遇,得到总体蓄水量。
    时间复杂度为O(n)。

代码:

#include <bits/stdc++.h>using namespace std;// two pointers
class Solution {
public:int trap(vector<int>& height) {int n = height.size();// Exceptional Case: if(n <= 2){return 0;}int ans = 0;int left = 0, right = n - 1;while(left < right){int min_height = min(height[left], height[right]);if(height[left] == min_height){while(++left < right && height[left] <= min_height){ans += (min_height - height[left]);}}else if(height[right] == min_height){while(left < --right && height[right] <= min_height){ans += (min_height - height[right]);}}}return ans;}
};

LeetCode 42. Trapping Rain Water(收集雨水Ⅰ)相关推荐

  1. LeetCode 42 Trapping Rain Water 收集雨水

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

  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的五种解法详解

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

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

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

  5. [LeetCode]42. Trapping Rain Water雨水填坑

    这个题难点在于无法保证右边是不是有更高的墙可以保证挡住水 双指针可以解决 /*两边指针保证,保证另外一边肯定有能挡住水的地方.如果从一边开始,不考虑另一边,是无法保证右边肯定有挡水的墙,如果右边只都比 ...

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

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

  7. LeetCode 42. Trapping Rain Water--算法题--c++解法

    LeetCode 42. Trapping Rain Water–c++解法 LeetCode题解专栏:LeetCode题解 LeetCode 所有题目总结:LeetCode 所有题目总结 大部分题目 ...

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

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

  9. Leetcode 动态规划 Trapping Rain Water

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

最新文章

  1. AI智能体学会动物进化法则:李飞飞等提出深度进化RL
  2. 从原理来看Silverlight 4的架构
  3. 【Linux网络编程】因特网的IP协议是不可靠无连接的,那为什么当初不直接把它设计为可靠的?
  4. 使用Jupyter Notebook+bokeh绘图入门完整步骤
  5. Qt应用程序主窗口框架
  6. 每日算法系列【LeetCode 1053】交换一次的先前排列
  7. Java设计模式之接口型模式总结
  8. exe 反编译 java_.exe文件怎么反编译为java代码(有木有造的)
  9. laas和saas_什么是IaaS,PaaS和SaaS及其区别
  10. reincarnation server
  11. js rsa java解密_RSA使用js加密,使用java解密
  12. 数据结构C语言版第二版第六章原创总结
  13. java JSON格式字符串数组 转 数组
  14. arm指令集:精简指令集、复杂指令集
  15. 青岛大学计算机二级考试,2017年3月青岛大学计算机等级考试准考证打印时间
  16. 新日标 第一课 李さんは中国人です(ノート)
  17. 元祖字典 java_元祖和字典
  18. 滴滴渡劫:“先活着再说”
  19. 232:vue+openlayers选择左右两部分的地图,不重复,横向卷帘
  20. 蓝桥杯第十二讲--图论【习题】

热门文章

  1. 3.11while循环计算1到100所有数据之和
  2. ArcBlock 启动去中心身份推广计划
  3. oracle中分页怎么写,分页查询到底怎么写比较好
  4. python蝴蝶代码_ProE常用曲線方程:Python Matplotlib 版本代碼(蝴蝶曲線)
  5. 分分钟开发一个网站——Python Django快速教程
  6. 2.4 计算几何形状的表面积与体积(project)
  7. ThreadPoolExecutor线程池核心参数详解
  8. DASCTF7月misc--ez_forenisc
  9. 妙趣横生的算法 C语言实现 pdf
  10. AD623单电源供电差分放大的电路设计与仿真