leetcode - Trapping Rain Water
2015-05-18 18:06
281 查看
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
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 Marcos for contributing this image!
分析:关键搞清楚长短板对水量的影响,此题可以认为由最高的水柱隔开左右两个大池子。
(1)对左面的大池子计算水量:
从左向右先找到第一个不为0的柱子;然后以这个柱子为基准,将其后比它小的柱子累计起来,求水量和,直到它成为短板,即出现比基准柱子更高的柱子。
更新此时最高的柱子为基准。
一直重复上述过程,直到最高的水柱结束左面大池子的水量统计;
(2)从右边开始找水池,并与左面相同,依次累计水量和,直到最高水柱,结束;
左右两边的水量和即是结果。
For example,
Given
[0,1,0,2,1,0,1,3,2,1,2,1], return
6.
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 Marcos for contributing this image!
分析:关键搞清楚长短板对水量的影响,此题可以认为由最高的水柱隔开左右两个大池子。
(1)对左面的大池子计算水量:
从左向右先找到第一个不为0的柱子;然后以这个柱子为基准,将其后比它小的柱子累计起来,求水量和,直到它成为短板,即出现比基准柱子更高的柱子。
更新此时最高的柱子为基准。
一直重复上述过程,直到最高的水柱结束左面大池子的水量统计;
(2)从右边开始找水池,并与左面相同,依次累计水量和,直到最高水柱,结束;
左右两边的水量和即是结果。
class Solution { public: int trap(vector<int>& height) { int n = height.size(); int current = 0; int cur_index = 0; int i = 0; for(i = 0; i<n; i++) { if(height[i] != 0) { current = height[i]; cur_index = i; break; } } int sum = 0; int cur_sum = 0; for(i = cur_index; i<n; i++) { if(height[i] < current) { cur_sum = cur_sum + current - height[i]; } else if(height[i] >= current) { cur_index = i; current = height[i]; sum = sum + cur_sum; cur_sum = 0; } } if(cur_index <n) { int daoxu = cur_index; cur_index = n-1; current = height[cur_index]; for(i = n-2; i>= daoxu; i--) { if(height[i] >= current) { cur_index = i; current = height[cur_index]; continue; } else { break; } } cur_sum = 0; for(i =cur_index; i>=daoxu; i-- ) { if(height[i] < current) { cur_sum = cur_sum + current - height[i]; } else if(height[i] >= current) { cur_index = i; current = height[i]; sum = sum + cur_sum; cur_sum = 0; } } } return sum; } };
相关文章推荐
- leetcode Trapping Rain Water
- Java [Leetcode 42]Trapping Rain Water
- [LeetCode]Trapping Rain Water
- LeetCode 111 Trapping Rain Water
- LeetCode Trapping Rain Water
- 37_leetcode_Trapping Rain water
- leetcode Trapping Rain Water
- [Leetcode 42, Hard] Trapping Rain Water
- leetcode--Trapping Rain Water
- [Leetcode] Trapping Rain Water
- leetcode - Trapping Rain Water
- [leetcode] Trapping Rain Water
- leetcode[42]Trapping Rain Water
- [LeetCode]Container With Most Water、Trapping Rain Water
- leetcode Trapping Rain Water
- LeetCode | Trapping Rain Water
- LeetCode 42 Trapping Rain Water
- [leetcode]Trapping Rain Water
- 【题解】【直方图】【Leetcode】Trapping Rain Water
- LeetCode--Trapping Rain Water