Leecode盛水最多的容器 超详细解析

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Leecode盛水最多的容器 超详细解析

问题描述:


给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水

image.png



问题分析: 初次看到这题 第一个想法就是用贪心:使得容器两侧尽可能高 中间尽可能长 却不知如何是好 后来才发现是审题错了 题目就是要求求最大面积,而不是容器内各个数值的相加  (我把柱子理解成水了......)!!审题真的很重要


根据容器的最大面积(体积)由短板决定,假设起始点x坐标为i,终点为j,板长分别是h[i],[j]

因此可得 S=min(h[i],[j])×(j-i)

不妨考虑向内移动板子(长板或短板)(对撞指针)


image.png

image.png


综上 我们希望容器尽可能大 只需要考虑短板内移的情形 求出最大面积即可


下面呈现代码:


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

核心就在于探索使得S变大的情况?

image.png



我是小郑 期待和你一起进步😄


目录
相关文章
|
7月前
|
调度 C++ 容器
【C++】手搓 list 容器
本文我们实现了STL库中重要的list 的模拟实现,其中最重要莫过于迭代器的封装类的书写,这是前所未有的操作(对于我来说,我是第一次使用这种结构)。通过list 的模拟实现也帮我们巩固了类与对象的知识,也强化了指针操作的思路。欢迎大家讨论分析。
53 1
|
7月前
|
容器
leetcode代码记录(盛最多水的容器
leetcode代码记录(盛最多水的容器
35 1
|
7月前
|
算法 容器
每日一题:LeetCode-11.盛水最多的容器
每日一题:LeetCode-11.盛水最多的容器
|
7月前
|
容器
容器的通俗讲解
容器的通俗讲解
77 0
|
7月前
|
自然语言处理 Rust 算法
【算法】11. 盛最多水的容器(多语言实现)
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明: 你不能倾斜容器。
【算法】11. 盛最多水的容器(多语言实现)
|
7月前
|
算法 C++ 容器
(C++)盛水最多的容器--双指针法
(C++)盛水最多的容器--双指针法
65 0
|
存储 C语言 C++
C++常见容器一网打尽
C++常见容器一网打尽
Leecode11 盛水最多的容器 双指针法
双指针两边逼近,能容纳水的量取决于最短的那一条边,如果 i 指向该条边,运算结束后 i++,反之 j-- 。
|
人工智能 容器
Leecode盛水最多的容器 超详细解析
Leecode盛水最多的容器 超详细解析
77 0
Leecode盛水最多的容器 超详细解析