Note: This coding challenge was asked in Goldman Sach coding round and in many other technical job interviews.
Given an array of non-negative integers representing the elevations from the vertical cross-section of a range of hills, determine how many units of snow could be captured between the hills.
Example:
See the example array and elevation map below.

Output: In this example, 13 units of snow (*) could be captured.
This problem is similar to the “maximum level of water it can trap after the rain”.
min(left[i], right[i]) - arr[i] for each element.We are implementing above algorithm using Python programming.
Prerequisite:
def computeSnowpack(arr):
# Todo: Implement computeSnowpack
len_arr = len(arr)
left = [arr[0]]*len_arr
left_max = arr[0]
for i in range(1, len_arr):
left_max = left_max if left_max>arr[i] else arr[i]
left[i] = left_max
right = [arr[-1]]*len_arr
right_max = arr[-1]
for i in range(len_arr-2, -1, -1):
right_max = right_max if right_max>arr[i] else arr[i]
right[i] = right_max
sum = 0
for i in range(len_arr) :
sum += min(left[i], right[i]) - arr[i]
return sum
def doTestsPass():
""" Returns True if all tests pass. Otherwise returns False. """
tests = [
[[2, 1, 3, ], 1],
[[0,1,3,0,1,2,0,4,2,0,3,0], 13],
[[2,1,3,0,1,2,0,4,2,0,3,0], 14],
]
for test in tests:
if not (computeSnowpack(test[0]) == test[1]):
return False
return True
if __name__ == "__main__":
if( doTestsPass() ):
print( "All tests pass" )
else:
print( "Not all tests pass")
Complexity:
Similar coding challenges asked in Goldman Sachs
If you have any other solution or if you have any question, let’s discuss in the comment.