11. 盛最多水的容器

11. 盛最多水的容器

mid

给出一个非负整数数组 a~1~,a~2~,a~3~,…… a~n~,每个整数标识一个竖立在坐标轴 x 位置的一堵高度为 a~i~ 的墙,选择两堵墙,和 x 轴构成的容器可以容纳最多的水。

https://markdown-1303167219.cos.ap-shanghai.myqcloud.com/image-20220227155740486.png

对撞指针

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
func maxArea(height []int) int {
	start, end := 0, len(height)
	curResult, maxResult := 0, 0
	for start < end {
		curWidth := end - start
		curHeight := 0
		// 因为高度取矮者 矮的一边的指针就可以往中间移动 因为反过来的移法面积必定更小
		if height[start] < height[end] {
			curHeight = height[start]
			start++
		} else {
			curHeight = height[end]
			end--
		}

		curResult = curWidth * curHeight
		if curResult > maxResult {
			maxResult = curResult
		}
	}
	return maxResult
}