其他分享
首页 > 其他分享> > 【数组】4:盛最多水的容器

【数组】4:盛最多水的容器

作者:互联网

Leetcode 11: 盛最多水的容器(python)

注:本人文章中内容中来自于各大佬的经验总结,仅供自身复习及学习,并无商业用途,若有时忘记标注作者及出处还请提醒,敬请见谅。

大佬思路

我想了很久,没有想出思路,于是参考了leetcode上大佬Krahets的题解,双指针思想太妙了!
以下内容均转载自leetcode的题解。

大佬思路如下:
设两指针 ii , jj ,指向的水槽板高度分别为 h[i]h[i] , h[j]h[j] ,此状态下水槽面积为 S(i, j)S(i,j) 。由于可容纳水的高度由两板中的 短板 决定,因此可得如下 面积公式 :
在这里插入图片描述
在这里插入图片描述
在每个状态下,无论长板或短板向中间收窄一格,都会导致水槽 **底边宽度 **−1​ 变短:

因此,初始化双指针分列水槽左右两端,循环每轮将短板向内移动一格,并更新面积最大值,直到两指针相遇时跳出;即可获得最大面积。

算法流程

  1. 初始化: 双指针 ii , jj 分列水槽左右两端;
  2. 循环收窄: 直至双指针相遇时跳出;
    1. 更新面积最大值 resres ;
    2. 选定两板高度中的短板,向中间收窄一格;
  3. 返回值: 返回面积最大值 resres 即可;

最后的python代码:

class Solution:
    def maxArea(self, height: List[int]) -> int:
        i, j, res = 0, len(height) - 1, 0
        while i < j:
            if height[i] < height[j]:
                res = max(res, height[i] * (j - i))
                i += 1
            else:
                res = max(res, height[j] * (j - i))
                j -= 1
        return res

作者:jyd
链接:https://leetcode-cn.com/problems/container-with-most-water/solution/container-with-most-water-shuang-zhi-zhen-fa-yi-do/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:容器,水槽,min,res,height,数组,最多水,短板,指针
来源: https://blog.csdn.net/Moshi_egg/article/details/122644664