// Source : https://oj.leetcode.com/problems/trapping-rain-water/ // Author : Hao Chen // Date : 2014-07-02 /********************************************************************************** * * 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! * **********************************************************************************/ #include int trap(int a[], int n) { int result = 0; //find the highest value/position int maxHigh = 0; int maxIdx = 0; for(int i=0; imaxHigh){ maxHigh = a[i]; maxIdx = i; } } //from the left to the highest postion int prevHigh = 0; for(int i=0; iprevHigh){ prevHigh = a[i]; } result += (prevHigh - a[i]); } //from the right to the highest postion prevHigh=0; for(int i=n-1; i>maxIdx; i--){ if(a[i]>prevHigh){ prevHigh = a[i]; } result += (prevHigh - a[i]); } return result; } #define TEST(a) printf("%d\n", trap(a, sizeof(a)/sizeof(int))) int main() { int a[]={2,0,2}; TEST(a); int b[]={0,1,0,2,1,0,1,3,2,1,2,1}; TEST(b); return 0; }