11-盛最多水的容器

11. 盛最多水的容器

利用双指针,不断更新面积

  • 决定面积大小的因素:两个柱子(指针)之间的距离以及两柱子的最低高度。所以面积表示为min(height[l],height[r])*(r-l)
  • 如果低柱子不动,让高柱子的那一侧往里跳,(r-l)会变更小,min(height[l],height[r])也不会变大,导致面积只会更小。因此不可以这样
  • 如果高柱子不动,让低柱子的那一侧往里跳,虽然(r-l)会变更小,但min(height[l],height[r])可能变大,导致面积可能变大。因此高柱子对应的指针不动,低柱子对应的指针向里测跳
class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        area=0
        l=0
        r=len(height)-1
        while l<r:
            area=max(area,(r-l)*min(height[l],height[r]))
            if height[l]>height[r]:
                r-=1
            else:
                l+=1
        return area
# so=Solution()
# print(so.maxArea([1,8,6,2,5,4,8,3,7]))
class Solution {
public:
    int maxArea(vector<int>& height) {
        int l=0;
        int r=height.size()-1;
        int area=0;
        while (l<r){
            area=max(area,min(height[l],height[r])*(r-l));
            height[l]<height[r]? l++:r--;
        }
        return area;
    }
};

   转载规则


《11-盛最多水的容器》 M 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
697-数组的度 697-数组的度
697. 数组的度 先统计一次数组,得到度 滑动窗口的左右指针用于更新并统计信息 先增大右窗口,得到符合条件的窗口后,开始缩小左窗口 class Solution { public: int findShortestSubAr
2021-09-03
下一篇 
6-Z字形变换 6-Z字形变换
6. Z 字形变换 模拟遍历过程 用一个flag记录当前是不是需要从上到下(从下到上)转换方向 初始flag设为-1。记录好当前行后,判断是否需要更新flag 如果行数为0或1,则直接返回 class Solution(object)
2021-09-02
  目录