Trapping Rain Water--LeetCode
来源:互联网 发布:租书软件 编辑:程序博客网 时间:2024/06/11 19:16
1.题目
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.
The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!
2.题意
给定 n 个非负整数,表示每条条形图的宽度是 1,计算出雨后能捕获多少水
3.分析
1)
基于动态规划 Dynamic Programming
维护一个一维数组dp
遍历数组两次,找出i位置左边的最大值和右边最大值
取其较小值,与height[i]相比
如果大于height[i],则将差值存入结果
注意第二次遍历需要先将maxH重置为0
2)
遍历数组一次即可
先比较两头找出较小值
如果较小值是left,则从左向右扫描
如果较小值是right,则从右向左扫描
若遇到的值比较小值小,则将差值存入结果,
如遇到的值大,则重新确定新的窗口范围,直至left和right指针重合
4.代码
注意res都为+=得到,不要错写成=
1)
class Solution {public: int trap(vector<int>& height) { int len = height.size(); if(len == 0) return 0; int maxH = 0; int res = 0; vector<int> container(len, 0); for(int i = 0; i < len; ++i) { container[i] = maxH; maxH = max(maxH, height[i]); } maxH = 0; for(int i = len - 1; i >= 0; --i) { container[i] = min(container[i], maxH); maxH = max(maxH, height[i]); if(container[i] > height[i]) res += container[i] - height[i]; } return res; }};
2)
class Solution {public: int trap(vector<int>& height) { int len = height.size(); if(len == 0) return 0; int l = 0; int r = len - 1; int res = 0; while(l < r) { int minH = min(height[l], height[r]); if(height[l] == minH) { ++l; while(l < r && height[l] < minH) { res += minH - height[l]; ++l; } } else { --r; while(l < r && height[r] < minH) { res += minH - height[r]; --r; } } } return res; }};
- LeetCode: Trapping Rain Water
- LeetCode : Trapping Rain Water
- [LeetCode] Trapping Rain Water
- [Leetcode] Trapping Rain Water
- [Leetcode] Trapping Rain Water
- [LeetCode]Trapping Rain Water
- LeetCode-Trapping Rain Water
- [leetcode] Trapping Rain Water
- [LeetCode] Trapping rain water
- Leetcode: Trapping Rain Water
- Leetcode:Trapping Rain Water
- [LeetCode] Trapping Rain Water
- <Leetcode>Trapping Rain Water
- Leetcode Trapping Rain Water
- leetcode Trapping Rain Water
- leetcode Trapping Rain Water
- LeetCode Trapping Rain Water
- LeetCode | Trapping Rain Water
- FTP
- 数组中只出现一次的数字 JAVA
- Yale N. Patt教授的《计算机系统概论》
- Netty 权威指南笔记(一):网络 I/O 模型和 Java NIO 入门
- 回文词
- Trapping Rain Water--LeetCode
- WebService的简单实现
- 猜数字游戏的提示
- unity打包xcode,在iOS11设备调试报错
- (对拍配套)随机生成数据
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- Spring Boot干货——(六)SpringBoot整合mybatis
- 前端面试常见问题——字符串反转
- HDU1573 X问题