原题目:
给定一个长度为
n
的整数数组height
。有n
条垂线,第i
条线的两个端点是(i, 0)
和(i, height[i])
。找出其中的两条线,使得它们与
x
轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。
说明:你不能倾斜容器。
提示:
n == height.length
2 <= n <= 105
0 <= height[i] <= 104
示例 1:
输入:[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
分析:
只要从数组的两端找到索引差值与索引对应高度的最大值即可,使用双指针思想,从两端开始,题目给出的条件满足一定存在,头尾各一个索引指针,循环结束条件为小于(必须两个不同索引),每次迭代高度最小的值(i++或j--),并且存水取决于两个索引最低的高度值,每次将当前值和之前计算保存的值比较保存,最终结果为最多。
代码:
Python3版本
class Solution:
def maxArea(self, height: List[int]) -> int:
#保存每次最有的结果
max_res = 0
#左指针
i = 0
#右指针
j = len(height) - 1
while i < j:
#左右指针处最小的高度
if height[j] < height[i]:
min_height = height[j]
else:
min_height = height[i]
#当前存水值和之前存水值比较,保留最大的
max_res = max(((j - i) * min_height), max_res)
if height[j] < height[i]:
j = j - 1
else:
i = i + 1
return max_res