leetcode(42) - Trapping Rain Water
2016-11-29 15:28
489 查看
给定n个非负整数,代表一个柱状图,每一个柱子的宽度为1,计算下雨之后柱状图能装多少水?
例如:
[0,1,0,2,1,0,1,3,2,1,2,1] 返回 6
上述柱状图是由数组表示[0,1,0,2,1,0,1,3,2,1,2,1]。在这种情况下,6个单位的雨水(蓝色部分)被装。
对于每个柱子,找到其左右两边最高的柱子,该柱子能容纳的面积就是 min(leftMostHeight,rightMostHeight) - height。所以,
1. 从左往右扫描一遍,对于每个柱子,求取左边最大值;
2. 从右往左扫描一遍,对于每个柱子,求最大右值;
3. 再扫描一遍,把每个柱子的面积并累加。
例如:
[0,1,0,2,1,0,1,3,2,1,2,1] 返回 6
上述柱状图是由数组表示[0,1,0,2,1,0,1,3,2,1,2,1]。在这种情况下,6个单位的雨水(蓝色部分)被装。
1. 从左往右扫描一遍,对于每个柱子,求取左边最大值;
2. 从右往左扫描一遍,对于每个柱子,求最大右值;
3. 再扫描一遍,把每个柱子的面积并累加。
int trap(int* height, int heightSize) { if(heightSize <= 2) return 0; int i = 0; int* left_max=malloc(sizeof(int) * heightSize); memset(left_max, 0, heightSize); int* right_max=malloc(sizeof(int) * heightSize); memset(right_max, 0, heightSize); int left_tmp_max=0, right_tmp_max=0, ret=0; while(i < heightSize){ // 针对每个元素i,寻找它左边最大的,保存在left_max[i] left_max[i] = left_tmp_max; if(left_tmp_max < height[i]) left_tmp_max=height[i]; i++; } i=heightSize-1; while(i >= 0){ // 针对每个元素i, 寻找它右边最大的,保存在right_max[i] right_max[i] = right_tmp_max; if(right_tmp_max < height[i]) right_tmp_max=height[i]; i--; } i=0; while(i<heightSize){ //处理每个元素i,将min(left_max[i], right_max[i])-height[i] 加到ret中,即每个元素上面可以存储的水 if(left_max[i] > right_max[i]) { ret+= ((right_max[i]-height[i])>0 ? (right_max[i]-height[i]) : 0); } else { ret+= ((left_max[i]-height[i])>0 ? (left_max[i]-height[i]) : 0); } i++; } return ret; }
相关文章推荐
- LeetCode 42: Trapping Rain Water 解题与思考
- [leetcode] 42 Trapping Rain Water
- LeetCode42——Trapping Rain Water
- Leetcode 42. Trapping Rain Water
- leetcode 42 Trapping Rain Water
- LeetCode 42 Trapping Rain Water(积水体积)
- leetcode problem 42 -- Trapping Rain Water
- 【leetcode】Array——Trapping Rain Water(42)
- LeetCode 42 Trapping Rain Water
- LeetCode42/11 Trapping Rain Water/Container With Most Water/Hist area**
- leetcode 42 Trapping Rain Water
- LeetCode 42 Trapping Rain Water
- LeetCode 42 Trapping Rain Water
- LeetCode-42-Trapping Rain Water 贪心或单调栈
- leetcode || 42、 Trapping Rain Water
- leetcode42_Trapping Rain Water
- leetcode-42 Trapping Rain Water
- leetcode 42:Trapping Rain Water
- leetcode question 42: Trapping Rain Water
- [Leetcode 42] Trapping Rain Water