标签:
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,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!
Analyse: The water can be trapped equals to the min(left[i], right[i]) - height[i], whereas left[i] and right[i] is the largest number of the left and right part of the number.
Runtime: 8ms.
1 class Solution { 2 public: 3 int trap(vector<int>& height) { 4 int n = height.size(); 5 if(n <= 1) return 0; 6 7 int *left = new int [n]; 8 int max = height[0]; 9 for(int i = 1; i < n - 1; i++){//find the largest of the left of a element 10 left[i] = max; 11 if(height[i] > max) 12 max = height[i]; 13 } 14 max = height[n - 1]; 15 int result = 0; 16 for(int j = n - 2; j >= 0; j--){ 17 int diff = min(max, left[j]) - height[j]; //the water trapped at index i 18 if(diff > 0) 19 result += diff; 20 if(height[j] > max) 21 max = height[j]; 22 } 23 return result; 24 } 25 };
标签:
原文地址:http://www.cnblogs.com/amazingzoe/p/4783934.html