leetcode042:Trapping Rain Water

问题描述

Trapping Rain Water

Givennnon-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], return6.

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

问题分析

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

代码

//运行时间:13msclass Solution {public:int trap(vector<int>& height) {int i = 0, j = height.size()-1;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]);elseans += (h – height[i]);}else{h = height[i];}i++; j–;}}return ans;}};

青春不是年华,而是心境;青春不是桃面丹唇柔膝,

leetcode042:Trapping Rain Water

相关文章:

你感兴趣的文章:

标签云: