leetcode11. 盛最多水的容器 python实现

题目:

leetcode11题目描述

解法:

    最开始采用两重for循环,遍历数组选出两个值,计算面积,但该方法超时,弃之。
    我们定义两个指针l和r分别指向数组的左右两端。然后两个指针向中间搜索,每移动一次计算一次面积,并和当前的最大面积值作比较,直到两指针重合,结束搜索。
    如何确定每次移动的是哪个指针?比较当前两指针对应的值,移动较小值的指针。举例来说,[1,8,6,2,5,4,8,3,7]最开始两指针指向1和7,1<7,所以向右移动数值1到8。因为如果移动大的数值7,接下来的面积只可能≤当前面积。而移动小的数值,接下来的面积可能比当前面积大。

具体代码如下:

class Solution:
    def maxArea(self, height: List[int]) -> int:
        l = 0
        r = len(height)-1
        res_area = 0
        while l<r:
            res_area = max((r-l)*min(height[l],height[r]),res_area)
            if height[l]>height[r]:
                r-=1
            else:
                l+=1
        return res_area
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容