您的位置:首页 > 大数据 > 人工智能

LeetCode-[双指针法]Container With Most Water

2017-09-02 21:43 507 查看
双指针法

即从左右两端开始扫描,若满足某种条件则会向中间移动,如此这样可以将复杂度从N2降至N

题意:每个点和X轴垂直,构成一个边,任选两个组成挡板储存水,求最多能储藏多少水。

分析:1、能放多少水由最短的板子决定。2、因为和位置有关,数据不能排序 3、暴力思维是枚举所有的情况,若想减少比较次数,第一反应是储存前面的最高?但是仍和两个板子间的距离有关,没有办法。

使用双指针,若左边板子高,计算此时的值和最大值。然后右边左移,此时减少的是右边板子的其余所有可能。因为右边板子的其余所有可能值都会比这个小。

class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
hlen=len(height)
if hlen<2:
return 0
l=0
r=hlen-1
ans=0
while l<r:
ans=max((r-l)*min(height[r],height[l]),ans)
if height[l]<height[r]:
l+=1
else:
r-=1
return ans
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: