码迷,mamicode.com
首页 > 其他好文 > 详细

363. 接雨水

时间:2017-12-31 10:49:04      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:res   int   lin   problem   tco   for   rap   ++   amazon   

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) 空间

O(n) 时间, O(n) 空间也可以接受

 

首先观察这个图形,可以注意到大致趋势是先增再减,总有一个最高点,水分布在最高点的两端

那么就可以先找到最高点,再分别向两端遍历,得到两端的水量,最后相加

 1 int trapRainWater(vector<int> &heights) {
 2         // write your code here
 3         if (heights.empty()){
 4             return 0;
 5         }
 6             
 7         int max_height=heights[0];
 8         int max_index=0;
 9         for(int i=1;i<heights.size();i++){
10             if(heights[i]>max_height){
11                 max_height=heights[i];
12                 max_index=i;
13             }
14         }
15         
16         max_height=heights[0];
17         int sum=0;
18         for(int i=1;i<max_index;i++){
19             if(heights[i]<max_height){
20                 sum+=max_height-heights[i];
21             }
22             max_height=max(max_height, heights[i]);
23         }
24         
25         max_height=heights[heights.size()-1];
26         for(int i=heights.size()-1;i>max_index;i--){
27             if(heights[i]<max_height){
28                 sum+=max_height-heights[i];
29             }
30             max_height=max(max_height, heights[i]);
31         }
32         
33         return sum;
34     }

 

363. 接雨水

标签:res   int   lin   problem   tco   for   rap   ++   amazon   

原文地址:https://www.cnblogs.com/TheLaughingMan/p/8153793.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!