Trapping Rain Water
来源:互联网 发布:js placeholder赋值 编辑:程序博客网 时间:2024/06/04 18:37
Description:
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.
#include <iostream>#include <vector>#include <algorithm>using namespace std;//分析:分层处理,这里是3层(即vec的最大值)class Solution_1{public: int trapRainWater(vector<int> &vec) { vector<int>::iterator iter_first,iter_last; int water_hold = 0; int vec_max = vec[0]; int vec_size = vec.size(); for (size_t i=1; i < vec_size ; i++) //找出最大值 { if (vec[i] > vec_max) vec_max = vec[i]; } for (int i =1; i <=3 ; ++i ) { for (auto it = vec.begin(); it != vec.end()-1 ; ++it) //找出第一个大于等于1的位置 { if (*it >= 1) { iter_first = it; break; } } for (auto it = vec.end()-1; it != vec.begin() ; --it) //找出最后一个大于等于1的位置 { if (*it >= 1) { iter_last = it; break; } } for (auto it = iter_first; it < iter_last + 1; ++it) { *it = *it -1; if (*it < 0) //判断是否小于0 water_hold++; } } return water_hold; }};// 首先找到最高的,然后从左往最高处扫,碰到一个数A[i],计算A[0,,,i-1]最高的是否高过A[i],// 如果是,则A[i]上的水的体积为max(A[0...i-1])-A[i],否则为0并且更新最大值.//从右往最高处再同样扫一遍class Solution_2{public: int trapRainWater(vector<int> &vec) { size_t n = vec.size(); if ( n <= 2) return 0; size_t max_index = 0; int sum_left = 0; int sum_right = 0; for (size_t i=1; i < n ; ++i) { if (vec[i] > vec[max_index]) max_index = i; } for (size_t i = 1; i < max_index ; ++i) //从左边到最高点 { int pre_max = vec[0]; if (vec[i] > pre_max) pre_max = vec[i]; else sum_left += pre_max - vec[i]; } for (size_t i = n-2; i > max_index ; --i) //从右边到最高点 { int pre_max = vec[n-1]; if (vec[i] > pre_max) pre_max = vec[i]; else sum_right += pre_max - vec[i]; } return sum_left + sum_right; }};int main(){ vector<int> water_trap ={0,1,0,2,1,0,1,3,2,1,2,1}; int water_hold = 0; Solution_1 solution_1; water_hold = solution_1.trapRainWater(water_trap); cout<<"the volume of trap water is: "<<water_hold<<endl; Solution_2 solution_2; water_hold = solution_2.trapRainWater(water_trap); cout<<"the volume of trap water is: "<<water_hold<<endl; return 0;}
0 0
- LeetCode: Trapping Rain Water
- LeetCode : Trapping Rain Water
- Trapping Rain Water
- [LeetCode] Trapping Rain Water
- [Leetcode] Trapping Rain Water
- [Leetcode] Trapping Rain Water
- Trapping Rain Water
- Trapping Rain Water
- [LeetCode]Trapping Rain Water
- Trapping Rain Water
- Trapping Rain Water
- LeetCode-Trapping Rain Water
- Trapping Rain Water
- [leetcode] Trapping Rain Water
- Trapping Rain Water
- [LeetCode] Trapping rain water
- Leetcode: Trapping Rain Water
- 38 - Trapping Rain Water
- python os.execl记录下遇到的传参问题
- MFC CColorStatic
- perl
- Swift教程17-淡化MVC,使用MVVM框架开发轻巧便于维护的iOS app
- 华为机试
- Trapping Rain Water
- java学习之路- 程序打包成jar
- Linux 常用命令
- C语言学习---存储类
- Java和.Net在做BS结构项目的比较
- iOS常用正则表达式
- 本人使用的vim配置
- Intellij IDEA依赖同步及乱码问题
- iOS之多线程精髓