Files
practice/pkg/trapping_rain_water/main.go
2026-01-12 19:38:01 -05:00

32 lines
642 B
Go

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
}