Leetcode中等:11. 盛最多水的容器

【力扣高频题】011. 盛最多水的容器 双指针解决 盛最多水的容器 阅读详情

题目:盛最多水的容器

  • 题号:11
  • 难度:中等
  • https://leetcode-cn.com/problems/container-with-most-water/

给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

示例1:

输入:[1,8,6,2,5,4,8,3,7]
输出:49 
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为49。

示例2:

输入:height = [1,1]
输出:1

提示:

  • n == height.length
  • 2<=n<=1052 <= n <= 10^52<=n<=105
  • 0<=height[i]<=1040 <= height[i] <= 10^40<=height[i]<=104

实现

第一种:利用暴力算法

C# 语言

  • 状态:超出时间限制
public class Solution {
    public int MaxArea(int[] height) {
        int max = int.MinValue;
        for (int i = 0; i < height.Length - 1; i++)
        {
            for (int j = i + 1; j < height.Length; j++)
            {
                int temp = (j - i)*Math.Min(height[i], height[j]);
                if (temp > max)
                {
                    max = temp;
                }
            }
        }
        return max;        
    }
}

第二种:利用双索引的方法

以0-7走到1-7这一步为例,解释为什么放弃0-6这一分支:

用h(i)表示第i条线段的高度,S(ij)表示第i条线段和第j条线段圈起来的面积。

已知 h(0) < h(7),从而S(07) = h(0) * 7。

有S(06) = min(h(0), h(6)) * 6。

当h(0) <= h(6),有S(06) = h(0) * 6;
当h(0) > h(6),有S(06) = h(6) * 6,S(06) < h(0) * 6。

由此可知,S(06)必然小于S(07)。

把每一棵子树按照同样的方法分析,很容易可以知道,双索引法走的路径包含了最大面积。

C# 语言

public class Solution 
{
    public int MaxArea(int[] height) 
    {
        int i = 0, j = height.Length - 1;
        int max = int.MinValue;
        while (i < j)
        {
            int temp = (j - i) * Math.Min(height[i], height[j]);
            if (temp > max)
            {
                max = temp;
            }
            if (height[i] < height[j])
            {
                i++;
            }
            else
            {
                j--;
            }
        }
        return max;        
    }
}

Python 语言

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        i, j = 0, len(height) - 1
        m = 0
        while i < j:
            temp = (j - i) * min(height[i], height[j])
            if temp > m:
                m = temp
            if height[i] < height[j]:
                i += 1
            else:
                j -= 1
        return m
【中等】力扣算法题解析LeetCode11:盛最多水的容器 采用双指针法高效求解容器盛水问题。初始化左右指针分别指向数组两端,计算当前容量并更新最大值。关键策略是移动高度较小的指针,以寻找潜在更大容量的组合。算法时间复杂度为O(n),空间复杂度O(1)。Java实现通过循环比较和指针移动,最终返回最大储水量。 阅读详情

相关推荐

LeetCode 11 - 盛最多水的容器

LeetCode 11 是一道经典的双指针问题,考察程序设计中的优化方法以及逻辑推导能力。题目核心是找到由两条柱子围成的、最多水的容器。以下是详细解法、变体和快速 AC 总结。给定一个长度为n的数组height,数组中每个元素表示一个高度。每对(i, j)组合能形成一个容器,其容积由两条柱子之间的和要求返回能够容纳最多水的容器的。

互联网架构师笔记 1004

11. 盛最多水的容器

给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是i0和iheighti])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。

qq_33480558的博客 531

workbench谐响应

定义材料 打开Engineering Data定义材料,在分析时不同部分选择不同材料 建模 打开Geometry建模,我举的例子很简单就一根光秃秃的轴 因为要加轴承,在轴上创建imprint face 因为要用point mass代替轴上原来的盘,在轴上盘的位置新建一个Plane,用Slice方法将轴从XYPlane3分成两段 施加边界条件以及谐响应分析 打开Model 1.在两段轴的交界面处,创建Point Mass,输入质量与转动惯量,位置在轴线上 2.mass point promote to.

my blogs include programming, math, physics.回首过去,放眼未来。 leslielee.blog.youkuaiyun.com 5882

C++力扣11. 盛最多水的容器(思路及代码)

1.题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。 题目链接:11.盛水最多的容器 2.解题思路 首先想到的就是暴力解法,两层循环,算出所有值,取最大的,但是超时了,但代码应该没问题。 class Solution { public: int maxArea(vecto

赵铁蛋的博客 1121

Win10或Win8下ObjectARX2015 Wizard向导创建项目失败解决方法

[原创]objectARX 2015 Wizard安装向导在Win8/win10下无法创建项目的解决方法总结 by edata @2017-5-1 objectARX 2015 Wizard安装向导在Win8/win10下无法创建项目的解决方法 因为Win8/Win10对系统盘(默认c:)使用了高级权限管理,所以在此盘下操作文件的修改工作都需要管理员权限才行。 基于这个原因,导致非管理员安

edata的博客 7028

Ubuntu22.04实战:基于VLLM高效部署Qwen3系列模型并构建Dify智能体

本文详细介绍了在Ubuntu22.04系统上使用VLLM高效部署Qwen3系列模型并集成Dify平台的实战指南。从环境配置、Conda管理到VLLM优化部署,再到Dify智能体构建,提供了全面的技术方案和性能调优建议,帮助开发者快速实现AI模型的高效部署与应用。

weixin_28323057的博客 161

leetcode力扣第11题:盛最多水的容器(算法题中等难度)

leetcode力扣第11题:盛最多水的容器(算法题中等难度)

weixin_44458771的博客 568

深入解析FastDDS:SHM与DATA-SHARING传输层的性能对比与实现细节

本文深入对比了FastDDS中SHM与DATA-SHARING两种传输层的实现机制与性能差异。SHM采用端口化共享内存模型,存在两次数据拷贝;而DATA-SHARING通过共享历史实现真正的零拷贝,大幅降低延迟与CPU占用。文章结合实战测试数据,为机器人、自动驾驶等高实时性场景提供了关键的性能优化选型与配置指南。

weixin_28358083的博客 231

leetcode: 11 盛最多水的容器 中等难度

题目描述 给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 说明:你不能倾斜容器,且 n 的值至少为 2。 图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(...

qq_33373173的博客 207

从T型结到Wilkinson:5分钟搞懂功分器选型指南(附最新射频测试数据对比)

本文通过对比T型结、电阻型和Wilkinson三种功分器的核心原理与实测数据,提供了清晰的射频功分器选型指南。文章结合最新的2.4GHz ISM频段测试数据,分析了插入损耗、回波损耗和端口隔离度等关键指标,并针对窄带物联网、射频测试及合成系统等不同应用场景,给出了具体的选型建议和实战提醒,帮助工程师根据系统需求做出最优决策。

bush的博客 305

第7章: MMU notifier在AMD GPU驱动中的应用

AMD GPU驱动利用MMU Interval Notifier机制实现共享虚拟内存(SVM)和异构内存管理(HMM)。通过分析AMDGPU内存架构(VRAM、GTT、Userptr)和Buffer Object设计,重点探讨了Userptr零拷贝机制如何依赖MMU notifier保持CPU/GPU内存一致性。HMM框架进一步实现统一地址空间和透明页面迁移,AMDGPU通过amdgpu_hmm.c实现两种invalidate回调(GFX和HSA模式),处理不同场景下的内存失效同步问题。

图形/计算GPU的驱动与虚拟化技术分享园地 2463

leetcode题:11. 盛最多水的容器(中等)

一、题目描述:11. 盛最多水的容器(中等) 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。 说明:你不能倾斜容器,且n的值至少为 2。 图中垂直线代表输入数组 [1,8,6,2,5,...

tankpanv的博客 203

【WRF-Chem工具】anthro_emiss 详解:生成人为排放数据

anthro_emiss 详解:生成人为排放数据

WW、forever的博客 2054

【LeetCode】第11题——盛最多水的容器(难度:中等)

【LeetCode】第11题——盛最多水的容器(难度:中等)题目描述解题思路代码详解注意点 题目描述 给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 说明:你不能倾斜容器。 示例 1: 输入:[1,8,6,2,5,4,8,3,7] 输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3

Se7en_Dayz的博客 191

【基础-单选】Row组件中有两个Text组件,如果使用justifyContent对齐方式,下面哪个属性可以实现左右两端对齐:

Row组件中有两个Text组件,如果使用justifyContent对齐方式,下面哪个属性可以实现左右两端对齐

江拥羡橙的博客 1303

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

图解LeetCode——11. 盛最多水的容器(难度:中等)

那么示例1中,height数组中的元素为[1,8,6,2,5,4,8,3,7],我们依次通过移动head指针或者tail指针,并且计算出每次的“最大容量”,并通过Math的max函数,将最终的最大容量作为结果进行返回。我们还是以上面图为例,由于最初的head指向的木桩高度为height[0],tail指向的木桩高度为height[height.length-1],他们之间的距离为x,由于height[0]小于height[height.length-1],所以容器的盛水容量就是。......

爪哇缪斯的博客 1001

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LeetCode:11. 盛最多水的容器————中等

目录题目解题思路Code运行结果 题目 11. 盛最多水的容器 给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 说明:你不能倾斜容器。 示例 1: 输入:[1,8,6,2,5,4,8,3,7] 输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示

Kinght_123的博客 356

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

4月打卡活动第18天 LeetCode第11题:盛最多水的容器(中等)

4月打卡活动第18天 LeetCode第11题:盛最多水的容器(中等) 之前做过啦~~

new_whiter的博客 154

【Hot100-Java中等】LeetCode 11. 盛最多水的容器:双指针法的直观理解与数学证明

本文深入解析LeetCode第11题"盛最多水的容器",通过分析题目核心公式和暴力解法的局限性,重点介绍了双指针优化算法。文章详细阐述了"谁短动谁"的移动策略原理,并给出严谨数学证明,说明该策略能确保最优解。最后提供了Java代码实现和复杂度分析,指出这道题是贪心算法与双指针结合的经典案例,关键在于理解如何通过移动短板指针来高效缩小搜索空间。

qq_55953518的博客 748

【LeetCode闲暇一题】11. 盛最多水的容器【中等】 关键词:数组-双指针

给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 说明:你不能倾斜容器。 示例 1: 输入:[1,8,6,2,5,4,8,3,7] 输出:49 解释:图中垂直线代表输入数组[1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。 示例 2: 输入:height.

积 153

【笔面试算法学习专栏】双指针专题:中等难度三题精讲(15.三数之和、11.盛最多水的容器、18.四数之和)

本文深入解析力扣hot100三道中等难度双指针题目:15.三数之和采用固定一重循环+对撞双指针优化三重循环,重点讲解三层去重策略;11.盛最多水的容器使用纯粹对撞指针,通过严谨的贪心证明保证移动短板的最优性;18.四数之和扩展为双重固定+对撞双指针模式,展示递归降维思想与多级剪枝技巧。文章系统归纳中等难度双指针问题的多指针协作、去重处理、贪心证明与剪枝优化的通用解题框架,为算法面试提供全面指导。

m0_50709695的博客 228

LeetCode - 11 盛最多水的容器

也就是说 h[R1] * (R1 - L1 + 1) 的结果是肯定大于 h[L] * (R - L + 1) 的,因此这里 L 虽然没有匹配到最优高柱 R1,但是 R1 作为矮柱时的容器肯定比当前 R1 作为高柱时的容器盛水更多。容器内水的容量大小 V,取决于容器两端中的较短柱子h_min,因此为了使得容器内水尽可能的多,我们应该找到距离 h_min 柱子最远的,且高度>= h_min 的另一个柱子。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。输入:height = [1,1]

优快云 1753

【LeetCode力扣】11. 盛最多水的容器 (中等)

这道题最优的方法就是用双指针,我们可以用指针left和指针right分别指向数组height[ ]的第一个数和最后一个数

m0_65277261的博客 898

leetcode11盛最多水的容器

双指针是一种常用的算法技巧,特别适用于数组和链表等线性数据结构。它通过使用两个指针(或索引)来迭代或扫描数据结构,常用于以下几类问题:对撞指针(Two Pointers Technique):两个指针分别从数据结构的两端向中间移动,直到它们相遇。这种方法常用于求解数组中的特定对(例如,两数之和问题、盛最多水的容器问题)。快慢指针(Tortoise and Hare Algorithm):一个指针每次移动一步,另一个指针每次移动两步。这种方法常用于检测链表中的环或找到链表的中间节点。

weixin_43683432的博客 1186

【力扣刷题实战】盛最多水的容器

文章目录目录力扣题目: 盛最多水的容器题目描述解题思路问题理解算法选择具体思路解题要点完整代码(C++)兄弟们共勉 !!! 每篇前言原题链接:11. 盛最多水的容器 - 力扣(LeetCode)给定一个长度为 的整数数组 。有 条垂线,第 条线的两个端点是 和 。找出其中的两条线,使得它们与 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例 1: 输入:[1,8,6,2,5,4,8,3,7] 输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,

2401_85548793的博客 1087

LeetCode 11. 盛最多水的容器

假设最优解的两个值为图中的两条竖线,我们的指针从左右两侧向中间移动,假设现在左边的指针先移动到了最优解的前面的竖线,现在要证明:如果左边指针先到达最优解的边界了的话,右边每次指向竖线的高度都严格小于左边指向的竖线。由此得到的结论是,假设左边先找到了最优解,那么右边的高度必然是严格小于左边界的。木桶原则是说一个水桶无论有多高,它盛水的高度取决于其中最低的那块木板。整个题目可以理解为:最好要早相遇,否则在晚相遇的基础上,每次都要找最好的。本题使用双指针的做法, 指针移动过程中会天然地造成木桶的“底”不断变小。

grq的博客 1880
上一篇: Leetcode中等:7. 整数反转
下一篇: 【电子学会】2020年06月Python一级 -- 编程题37
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青少年编程小助手_Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值