package trapping_rain_water func Trap(heights []int) int { // Calculate area taken up by the boundary. boundary_area := 0 for _, height := range heights { boundary_area += height } // Calculate the total area taken up by the boundary and the water. total_area := 0 left := 0 left_height := 0 right := len(heights) - 1 right_height := 0 for left <= right { left_height = max(left_height, heights[left]) right_height = max(right_height, heights[right]) if left_height < right_height { total_area += left_height left++ } else { total_area += right_height right-- } } return total_area - boundary_area }