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!
int trap(int A[], int n){ int left[n]; int right[n]; int leftMax = 0; for (int i = 0; i < n; i++) { left[i] = leftMax; leftMax = max(leftMax, A[i]); } int rightMax = 0; for (int i = n-1; i >= 0; i--) { right[i] = rightMax; rightMax = max(rightMax, A[i]); } int result = 0; for (int i = 0; i < n; i++) { int temp = min(left[i], right[i]) - A[i]; if (temp > 0) { result += temp; } } return result;}
新闻热点
疑难解答