原题链接

题目描述

给定一个长度为 nn 的整数数组 heightheight 。有 nn 条垂线,第 ii 条线的两个端点是 (i,0)(i, 0)(i,height[i])(i, height[i])

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

**说明:**你不能倾斜容器。

示例 1:

img

输入:[1,8,6,2,5,4,8,3,7]
输出:49 
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49

示例 2:

输入:height = [1,1]
输出:1

提示:

  • n==height.lengthn == height.length
  • 2n1052 \le n \le 10^5
  • 0height[i]1040 \le height[i] \le 10^4

双指针

func maxArea(height []int) int {
	i, j := 0, len(height)-1
	res := 0
	for i < j {
		res = max((j-i)*min(height[i], height[j]), res)
		if height[i] <= height[j] {
			i++
		} else {
			j--
		}
	}
	return res
}