加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

leetcode042:Trapping Rain Water

发布时间:2020-12-13 20:46:54 所属栏目:PHP教程 来源:网络整理
导读:问题描写 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,2,3,1] ,return 6 . The above elevati

问题描写

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,2,3,1],return 6.


The above elevation map is represented by array [0,1]. In this case,6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!

问题分析

这道题目解题思路可以参考leetcode011:Container With Most Water 的分析,leetcode011是求围住的最大面积,这里有所区分,统计“装水”面积,还是从两边向中间扫描,时间复杂度O(n)。 这里设置1个水平面h,表示当前围住的高度,如果后续扫面到的比h低,说明可以装水,统计;如果比h高,更新h便可。

代码

//运行时间:13ms class Solution { public: int trap(vector<int>& height) { int i = 0,j = height.size()⑴; int ans = 0; int h = 0; while (j-i >= 0){ if (height[i] > height[j]){ if (height[j] <= h){ ans += (h - height[j]); } else{ h = height[j]; } j--; } else if (height[i] < height[j]){ if (height[i] <= h){ ans += (h - height[i]); i++; } else{ h = height[i]; } } else{ if (height[i] <= h){ if (i != j) ans += 2 * (h - height[i]); else ans += (h - height[i]); } else{ h = height[i]; } i++; j--; } } return ans; } };


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读