盛最多水的容器
题目
个人解
一分钟出想法,三分钟出答案,第四分钟测试,五分钟出结果,自己懵逼。
我以为大家都会想这种做法,然后可能运行效率很低,击败10%左右的人。
结果力扣平台不讲武德啊
先看代码,就是一个O(n2)的循环遍历。
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
Max=0
for x,i in enumerate(height):
for y,j in enumerate(height):
if y>x:
Max=(y-x)*min(i,j) if (y-x)*min(i,j)>Max else Max
return Max
然而平台的测试用例是这样的。。。。
这还是我把浏览器缩放到最小才截的图。
第二个解,双指针法
仔细考虑了一下,然后当想点开解析的时候看到了双指针的标题,瞬间就想明白了。
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
Max=0
i=0
j=len(height)-1
while i<j:
if height[i]>=height[j]:
Max=max(Max,(j-i)*height[j])
j-=1
else:
Max=max(Max,(j-i)*height[i])
i+=1
return Max
详解
这个是执行最快的解,思路是一样的,细节上没有使用内置的max函数,而是多使用if语句判断,可能会快一点吧。
感觉这一题可以不用引用别人的解了,终于想明白一次
这个图画的比较好
官方给出的解释很详细,没想明白为什么双指针可以找到最优解的可以仔细阅读阅读