接雨水
来源:互联网 发布:倩女幽魂有没有mac版 编辑:程序博客网 时间:2024/06/11 10:03
问题描述:
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.
如上图所示,海拔分别为 [0,1,0,2,1,0,1,3,2,1,2,1], 返回 6.
挑战
O(n) 时间, O(1) 空间
思路:题目不难,观察下就可以发现被水填满后的形状是先升后降的塔形,因此,先遍历一遍找到塔顶,然后分别从两边开始,往塔顶所在位置遍历,水位只会增高不会减小,且一直和最近遇到的最大高度持平,这样知道了实时水位,就可以边遍历边计算面积。
c++代码如下:
class Solution {public: /* * @param heights: a list of integers * @return: a integer */ int trapRainWater(vector<int> &heights) { // write your code here //防止越界 if(heights.size() < 2)return 0; int maxheight = 0; int maxindex = 0; //寻找最高峰 for(int i = 0;i!=heights.size();++i){ if(heights[i]>maxheight){ maxheight = heights[i]; maxindex = i; } } int waterarea = 0; int pedge = 0; int qedge = 0; for(;qedge<maxindex;){ qedge++; if(heights[qedge] > heights[pedge]){ pedge = qedge; } else{ waterarea = waterarea+heights[pedge]-heights[qedge]; } } pedge = heights.size() - 1; qedge = heights.size() - 1; for(;qedge>maxindex;){ qedge--; if(heights[qedge] > heights[pedge]){ pedge = qedge; } else{ waterarea = waterarea+heights[pedge]-heights[qedge]; } } return waterarea; }};
阅读全文
0 0
- 接雨水
- 接雨水
- 接雨水
- LintCode-接雨水
- LintCode:接雨水
- LintCode:接雨水
- 接雨水 lintcode
- 接雨水问题(C++)
- 接雨水问题
- lintcode[363]:接雨水
- Java实现-接雨水
- LintCode:M-接雨水
- 接雨水-LintCode
- 接雨水 II-LintCode
- LintCode rain trap 接雨水
- [LintCode 363] 接雨水(Python)
- **[Lintcode]Trapping Rain Water 接雨水
- 接雨水最大面积Trapping Rain Water
- 共享内存代码
- Recycleview使用详情及添加点击事件
- 黑幕!虚拟化社区被攻击,狗血的剧情
- hdu 1536 S-Nim(SG函数)
- HTML+CSS+JS实现banner横幅自动切换效果
- 接雨水
- https
- Storm安装笔记
- Django unittest 设置跳过某些case
- js把for循环出来的数据存入数组
- matlab2c使用c++实现matlab函数系列教程-sum函数
- PHP的trim和preg_replace导致乱码的问题及解决
- Android—环信聊天开发总结以及遇到的坑
- mySQL之delete from 与truncate