| 1234567891011121314151617181920212223242526272829303132333435 | package mainfunc trap(height []int) (units int) {	n := len(height)	if n <= 2 {		return 0	}	left, right := 0, n-1 // Bidirection scan is the key!!!	maxLeft, maxRight := height[left], height[right]	for left <= right {		if height[left] <= height[right] { // So left bar would meet right bar			if height[left] > maxLeft {				maxLeft = height[left]			} else {				units += maxLeft - height[left]			}			left++		} else { // Else, right bar would meet left bar			if height[right] > maxRight {				maxRight = height[right]			} else {				units += maxRight - height[right]			}			right--		}	}	return}// func main() {// 	h := []int{0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1}// 	println(trap(h))// 	h = []int{}// 	println(trap(h))// }
 |