啊啊,这个题想的复杂了,总以为用例没有包含某种特殊情况,就是一直左右相等的情况。慢慢想了下发现想错了。
这个题,就用双指针。左右逼近。小的移动,因为只要互相靠近,那就说明底变短了,希望最低的高变大,来放更多的水。嗯,就是这样。所以左右相等的时候,随便走一个,水肯定是少了,比较最低的高,只会更低,不会更高。
Tags array | two-pointers
题目:
11. 盛最多水的容器
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。
图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
示例:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
好了,直接看代码
code:
class Solution:
def maxArea(self, height: List[int]) -> int:
l = 0
r = len(height)-1
maxnum = 0
while l < r:
num = min(height[l], height[r]) * (r-l)
maxnum = max(maxnum, num)
if height[l] < height[r]:
l += 1
else:
r -= 1
return maxnum
好了。就这样吧。