1
1
using NUnit . Framework ;
2
+ using System ;
2
3
using System . Collections . Generic ;
3
4
using System . Linq ;
4
5
@@ -66,6 +67,24 @@ int[] MoveZeros(int[] arrayOfNumbers)
66
67
return listOfElements . ToArray ( ) ;
67
68
}
68
69
70
+ int GetTrappingRainWater ( int [ ] elevationMap )
71
+ {
72
+ if ( elevationMap == null || elevationMap . Length == 0 )
73
+ return 0 ;
74
+ int waterToDrop = 0 ;
75
+ int level = 0 ;
76
+ int left = 0 ;
77
+ int right = elevationMap . Length - 1 ;
78
+ while ( left < right )
79
+ {
80
+ int lower = elevationMap [ elevationMap [ left ] < elevationMap [ right ] ? left ++ : right -- ] ;
81
+ level = Math . Max ( lower , level ) ;
82
+ waterToDrop += level - lower ;
83
+ Console . WriteLine ( $ "left{ left } right{ right } lower { lower } level { level } waterToDrop { waterToDrop } ") ;
84
+ }
85
+ return waterToDrop ;
86
+ }
87
+
69
88
[ Test ]
70
89
public void RemoveDuplicatesFromSortedArray_1 ( )
71
90
{
@@ -110,5 +129,16 @@ public void MoveZeros_4()
110
129
111
130
Assert . AreEqual ( expectedArrayWithZerosInTheEnd , arrayWithRemoveElement ) ;
112
131
}
132
+
133
+ [ Test ]
134
+ public void TrappingRainWater_6 ( )
135
+ {
136
+ var elevationMap = new int [ ] { 0 , 1 , 0 , 2 , 1 , 0 , 1 , 3 , 2 , 1 , 2 , 1 } ;
137
+ var expectedValue = 6 ;
138
+
139
+ var rainWaterValue = GetTrappingRainWater ( elevationMap ) ;
140
+
141
+ Assert . AreEqual ( expectedValue , rainWaterValue ) ;
142
+ }
113
143
}
114
144
}
0 commit comments