LeetCode 42. Trapping Rain Water(收集雨水Ⅰ)
题目描述:
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
.
分析:
思路:这道题跟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(收集雨水Ⅰ)相关推荐
- LeetCode 42 Trapping Rain Water 收集雨水
LeetCode 42 Trapping Rain Water 收集雨水 Given n non-negative integers representing an elevation map whe ...
- 【重点:DP 双指针 栈】LeetCode 42. Trapping Rain Water
LeetCode 42. Trapping Rain Water 本博客转载自:http://www.cnblogs.com/grandyang/p/4402392.html [自己又不会做,抄的-& ...
- leetcode#42 Trapping rain water的五种解法详解
leetcode#42 Trapping rain water 这道题十分有意思,可以用很多方法做出来,每种方法的思想都值得让人细细体会. 42. Trapping Rain Water Given ...
- LeetCode 42. Trapping Rain Water 【两种解法】(python排序遍历,C++ STL map存索引,时间复杂度O(nlogn))
LeetCode 42. Trapping Rain Water Python解法 解题思路: 本思路需找到最高点左右遍历,时间复杂度O(nlogn),以下为向左遍历的过程. 将每一个点的高度和索引存 ...
- [LeetCode]42. Trapping Rain Water雨水填坑
这个题难点在于无法保证右边是不是有更高的墙可以保证挡住水 双指针可以解决 /*两边指针保证,保证另外一边肯定有能挡住水的地方.如果从一边开始,不考虑另一边,是无法保证右边肯定有挡水的墙,如果右边只都比 ...
- Leetcode 407. Trapping Rain Water II 收集雨水2 解题报告
1 解题思想 我看了下题目,发现比预想中的简单,加之我比较烂,所以其实我还是没做,只是看懂了上回贴的代码,然后做了一下注释,现在我来讲下题目. 首先请看下上一题,上一题是2D的这题是3D的: Leet ...
- LeetCode 42. Trapping Rain Water--算法题--c++解法
LeetCode 42. Trapping Rain Water–c++解法 LeetCode题解专栏:LeetCode题解 LeetCode 所有题目总结:LeetCode 所有题目总结 大部分题目 ...
- 【重点:BFS】LeetCode 407. Trapping Rain Water II
LeetCode 407. Trapping Rain Water II 博客转载自:http://www.cnblogs.com/grandyang/p/5928987.html [太难了,被智商碾 ...
- Leetcode 动态规划 Trapping Rain Water
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie Trapping Rain Water Total Accepted: 14568 Tota ...
最新文章
- AI智能体学会动物进化法则:李飞飞等提出深度进化RL
- 从原理来看Silverlight 4的架构
- 【Linux网络编程】因特网的IP协议是不可靠无连接的,那为什么当初不直接把它设计为可靠的?
- 使用Jupyter Notebook+bokeh绘图入门完整步骤
- Qt应用程序主窗口框架
- 每日算法系列【LeetCode 1053】交换一次的先前排列
- Java设计模式之接口型模式总结
- exe 反编译 java_.exe文件怎么反编译为java代码(有木有造的)
- laas和saas_什么是IaaS,PaaS和SaaS及其区别
- reincarnation server
- js rsa java解密_RSA使用js加密,使用java解密
- 数据结构C语言版第二版第六章原创总结
- java JSON格式字符串数组 转 数组
- arm指令集:精简指令集、复杂指令集
- 青岛大学计算机二级考试,2017年3月青岛大学计算机等级考试准考证打印时间
- 新日标 第一课 李さんは中国人です(ノート)
- 元祖字典 java_元祖和字典
- 滴滴渡劫:“先活着再说”
- 232:vue+openlayers选择左右两部分的地图,不重复,横向卷帘
- 蓝桥杯第十二讲--图论【习题】
热门文章
- 3.11while循环计算1到100所有数据之和
- ArcBlock 启动去中心身份推广计划
- oracle中分页怎么写,分页查询到底怎么写比较好
- python蝴蝶代码_ProE常用曲線方程:Python Matplotlib 版本代碼(蝴蝶曲線)
- 分分钟开发一个网站——Python Django快速教程
- 2.4 计算几何形状的表面积与体积(project)
- ThreadPoolExecutor线程池核心参数详解
- DASCTF7月misc--ez_forenisc
- 妙趣横生的算法 C语言实现 pdf
- AD623单电源供电差分放大的电路设计与仿真