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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 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



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


目录
相关文章
|
算法 容器
【算法专题突破】双指针 - 盛最多水的容器(4)
【算法专题突破】双指针 - 盛最多水的容器(4)
36 0
|
27天前
|
容器
Leetcode第十一题(盛最多水的容器)
LeetCode第十一题要求找出两条线,使得它们与x轴构成的容器能盛最多的水,通常使用双指针法来解决,通过移动较短的一边来尝试增加容量。
12 0
Leetcode第十一题(盛最多水的容器)
|
5月前
|
算法 测试技术 程序员
力扣经典150题解析之二十八:盛最多水的容器
力扣经典150题解析之二十八:盛最多水的容器
40 0
|
6月前
|
容器
leetcode代码记录(盛最多水的容器
leetcode代码记录(盛最多水的容器
29 1
|
6月前
|
算法 容器
每日一题:LeetCode-11.盛水最多的容器
每日一题:LeetCode-11.盛水最多的容器
|
6月前
|
算法 Java C++
【数据结构和算法】盛最多水的容器
给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i, 0)和(i, height[i])。 找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。
67 2
【数据结构和算法】盛最多水的容器
|
6月前
|
自然语言处理 Rust 算法
【算法】11. 盛最多水的容器(多语言实现)
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明: 你不能倾斜容器。
【算法】11. 盛最多水的容器(多语言实现)
|
6月前
|
容器
LeetCode题:11. 盛最多水的容器
LeetCode题:11. 盛最多水的容器
29 0
|
6月前
|
人工智能 容器
leetcode-11:盛最多水的容器
leetcode-11:盛最多水的容器
44 0
|
6月前
|
存储 算法 Java
Leetcode算法系列| 11. 盛最多水的容器
Leetcode算法系列| 11. 盛最多水的容器

热门文章

最新文章