LeetCode——Trapping Rain Water
来源:互联网 发布:常青藤软件cad2014 编辑:程序博客网 时间:2024/06/06 05:05
题目
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.- 解法1
分治法,O(n log n)。对于区间[l, r],如果max(height[l+1] … height[r-1]) > max(height[l], height[r]),那么res(l, r) = res(l, heighest_index) + res(heighest_index, r)。
class Solution { int f(vector<int>& height, int l, int r) { if (r - l <= 1) return 0; int Max = -1, id = 0; for (int i = l + 1; i < r; i++) { if (height[i] > Max) { Max = height[i]; id = i; } } if (Max <= height[l] && Max <= height[r]) { int h = std::min(height[l], height[r]), ret = 0; for (int i = l + 1; i < r; i++) ret += std::max(0, h - height[i]); return ret; } else { return f(height, l, id) + f(height, id, r); } }public: int trap(vector<int>& height) { int l = 0, r = (int)height.size() - 1; return f(height, l, r); }};
- 解法2
O(n)复杂度。考虑一下,填满后的特点,一定是中间高两边低(边界情况是递增或者递减)。那么从两侧往中间扫描的时候,就可以知道当前位置的水位。
class Solution {public: int trap(vector<int>& height) { int l = 0, r = (int)height.size() - 1, level = 0, ret = 0; while (l < r) { int lower = height[height[l] < height[r] ? l++ : r--]; level = std::max(level, lower); ret += level - lower; } return ret; }};
0 0
- LeetCode —— Trapping Rain Water
- LeetCode——Trapping Rain Water
- LeetCode题解——Trapping Rain Water
- leetcode 042 —— 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
- Java中转UTC时间字符串(含有T Z)为local时间(2017-01-22T09:28:33Z)
- 倩倩的test啦啦啦
- 手把手教你从零实现Linux misc设备驱动一(基于友善之臂4412开发板)
- 【git】git分支branch和标签tag之增删改查
- ESP8266--学习笔记(五)TCP通信--TCP-Server
- LeetCode——Trapping Rain Water
- 倩倩的test啦啦啦
- Eclipse安装Spring插件 学习SpringBoot的应该用的到 -这个一定要记录下来
- web工程中的web.xml文件的作用
- GPLT L3-005. 垃圾箱分布【最短路Dijkstra】
- 倩倩的test啦啦啦
- Oracle EM配置失败终极解决方案
- GitHub基本使用
- 算法练习笔记(五)— 图