【力扣高频题】011. 盛最多水的容器

news2024/11/25 10:10:47

前面的算法文章,更新了许多 专题系列 。包括:滑动窗口、动态规划、加强堆、二叉树递归套路 等。

还没读过的小伙伴可以关注一下,在主页中点击对应链接查看哦~

接下来的一段时间,将持续 「力扣高频题」 系列文章,想刷 力扣高频题 的小伙伴也可以关注一波哦 ~

言归正传,今天我们来讲一道中等难度的力扣高频题,与 接雨水问题 很类似哦~

11. 盛最多水的容器

给定一个长度为 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:

输入: [1,1]

输出: 1

  • 提示:
  • n == height.length
  • 2 <= n <= 1 0 5 10^5 105
  • 0 <= height[i] <= 1 0 4 10^4 104

思路分析

一个很简单的道理:能够装多少水量,取决于较短的竖线的 长度 ,以及两根竖线之间的 距离

总水量 = 较短的长度(高度) × 距离(宽度)

由于两个因素变量是相乘的关系,两者的改变可能会导致结果呈现此起彼伏的变化,不便于讨论分析。因此,需要想办法控制变量。

显然,若 高度一样 的情况下,距离越长 能够存储的 最大水量越大 。最终要找的就是最大值,因此设置两个指针一开始先分别指向数组的首尾(此时距离最长),然后逐步缩小该距离(即移动双指针)。

要想当 距离缩短 时,反而获得更大的存储水量,唯一的办法就是 增高较短边的长度

思考到这里,做题的思路就逐步清晰了:缩短距离时,优先要移动此时较短的指针,只有这样才能有增大最终答案的 可能性

如果错误的先移动了较长的边,高度只有可能 不变或减小 ,距离 一定会减小,导致了最终答案也一定是 变小,做了无用功。

代码

public static int maxArea(int[] h) {
    int max = 0;
    int l = 0;
    int r = h.length - 1;
    while (l < r) {
        max = Math.max(max, Math.min(h[l], h[r]) * (r - l));
        if (h[l] > h[r]) {
            r--;
        } else {
            l++;
        }
    }
    return max;
}

代码解释

  1. 当前最大水量的计算:左右指针中最短的边 × 距离l - r
  2. 通过if - else语句判断双指针此时指向的高度,谁短移动谁 。
  3. 设置max变量更新最大值,遍历结束(两指针相遇),得到最终最大蓄水量。
  • 复杂度分析
    • 时间复杂度: O ( N ) O(N) O(N),双指针一共遍历数组一遍即可。
    • 空间复杂度: O ( 1 ) O(1) O(1)

刷过类似题目的小伙伴很容易想到一道很经典的题目 接雨水 问题,点赞关注,下次我们接着讲!


~ 点赞 ~ 关注 ~ 星标 ~ 不迷路 ~!!!

回复「ACM紫书」获取 ACM 算法书籍 ~
回复「算法导论」获取 算法导论第3版 ~

在看 + 转发

让你的小伙伴们一起来学算法吧!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1872327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【python】OpenCV—Color Correction

文章目录 cv2.aruco 介绍imutils.perspective.four_point_transform 介绍skimage.exposure.match_histograms 介绍牛刀小试遇到的问题 参考学习来自 OpenCV基础&#xff08;18&#xff09;使用 OpenCV 和 Python 进行自动色彩校正 cv2.aruco 介绍 一、cv2.aruco模块概述 cv2.…

DC/AC电源模块:为新能源汽车充电系统提供高效能源转换

BOSHIDA DC/AC电源模块&#xff1a;为新能源汽车充电系统提供高效能源转换 DC/AC电源模块是新能源汽车充电系统中至关重要的组件&#xff0c;它能够将直流电转换为交流电&#xff0c;为电动车提供高效能源转换。随着人们对可持续能源的需求日益增长&#xff0c;新能源汽车成为…

Spring Cloud LoadBalancer基础入门与应用实践

官网地址&#xff1a;https://docs.spring.io/spring-cloud-commons/reference/spring-cloud-commons/loadbalancer.html 【1】概述 Spring Cloud LoadBalancer是由SpringCloud官方提供的一个开源的、简单易用的客户端负载均衡器&#xff0c;它包含在SpringCloud-commons中用…

4.制作的docker镜像

最近工作需要&#xff0c;制作docker镜像&#xff0c;用做构建使用。 1.拉取基础镜像ubuntu:22.04 docker pull ubuntu:22.042.运行ubuntu容器 docker run --privileged -d --name ubuntu_build ubuntu:22.04 sleep infinity3.进入运行的容器 docker exec -it ubuntu_build …

看完这篇,我太爷都要学习大模型了

2008年&#xff0c;年入过亿的媒体人Jeremy Clarkson心血来潮在英国牛津附近的Chadlington查德灵顿买了1000英亩&#xff08;大约6000亩&#xff09;的土地&#xff0c;并托管给了当地的一个农民大叔。作为地主老头的Clarkson从此每年坐收数万英镑的利润。 8年后&#xff0c;农…

解决Transformer根本缺陷,所有大模型都能获得巨大改进

即使最强大的 LLM 也难以通过 token 索引来关注句子等概念&#xff0c;现在有办法了。 最近两天&#xff0c;马斯克和 LeCun 的口水战妥妥成为大家的看点。这两位 AI 圈的名人你来我往&#xff0c;在推特&#xff08;现为 X&#xff09;上相互拆对方台。 LeCun 在宣传自家最新论…

【C++/STL】:优先级队列的使用及底层剖析仿函数

目录 &#x1f4a1;前言一&#xff0c;优先级队列的使用二&#xff0c;仿函数1&#xff0c;什么是仿函数2&#xff0c;仿函数的简单示例 三&#xff0c;优先级队列的底层剖析 &#x1f4a1;前言 优先队列(priority_queue)是一种容器适配器&#xff0c;默认使用vector作为其底层…

热点观察 | 《姜饼人王国》新作来袭、《Monopoly GO!》荣登5月全球畅销榜榜首

本周出海热点&#xff1a; 1. 中国品牌借欧洲杯打响知名度 2. 米哈游玩家切割二次元 3. 6月27日&#xff0c;Steam游戏《六月衷曲》上线TapTap 4. 《Monopoly GO!》荣登5月全球畅销榜榜首 5. 《地下城与勇士》拿下本周亚洲T1市场畅销榜冠军 6. 《姜饼人王国》新作强势登顶…

MySQL基础查询与复杂查询

基础查询 1、查询用户信息&#xff0c;仅显示用户的姓名与手机号&#xff0c;用中文显示列名。中文显示姓名列与手机号列。 2、根据商品名称进行模糊查询&#xff0c;模糊查询需要可以走索引&#xff0c;需要给出explain语句。使用explain测试给出的查询语句&#xff0c;需要显…

高中数学:复数-三角表示式

一、定义 辐角主值 二、复数乘除运算的三角表示及其几何意义 乘法 复数乘法的几何意义 除法 练习 解

Linux自动化交互脚本expect开发

在日常开发任务中&#xff0c;运行shell脚本有时候会提示输入密码的操作&#xff0c;如何让脚本自动输入密码呢&#xff1f;这时使用expect帮我们输入&#xff0c;Expect是基于Tcl发展而来的&#xff0c;它不仅可以进行交互&#xff0c;还可以根据程序的提示模拟标准输入&#…

AI原力觉醒:华硕NUC组团出道,快来Pick属于你的NUC

NUC 家族组团出道&#xff0c;全新的计算体验&#xff0c;重新定义桌面设备。AI加持下&#xff0c;谁最适合你&#xff1f; 颜值担当 NUC 14 Pro 居家必备单品 适用于广大消费者的NUC 14 Pro&#xff0c;不仅颜值在线&#xff0c;更多方位考虑您的日常所需&#xff0c;工作娱…

项目测试计划(Word)

1简介 1.1 目的 1.2 范围 2. 测试参考文档和测试提交文档 2.1 测试参考文档 2.2 测试提交文档 3. 测试策略 3.1整体测试策略 3.2功能测试 3.3 界面测试 3.4 性能测试 3.5 安全性测试 3.6 工具 4 测试阶段进入和退出标准 4.1进入标准 4.2退出标准 5 测试范围 5.1需要测试的模块 …

AirTestIDEA 使用windows窗口连接,切窗口后无法再操作已连接的游戏画面

目录 左上角&#xff1a; 选项 - 设置 - Windows窗口无嵌入链接(勾选)&#xff0c; 再使用 Windows窗口连接&#xff0c;中的"选择游戏画面"&#xff0c;可解决

【高等数学】一元函数积分及其应用:定积分与反常积分

文章目录 第一节. 定积分一. 定积分的概念1. 定义2. 定积分存在定理3. 定积分的几何意义与求解 二. 定积分的性质1. 不等式2. 中值定理 三. 积分上限&#xff08;为x&#xff09;函数1. 积分上限函数定义2. 积分函数求导3. 积分函数的奇偶性变化 四. 定积分的计算 第二节. 反常…

真实案例解析!企业如何做好安全生产管理工作?

很多企业都有相对应的安全管理制度&#xff0c;安全管理系统&#xff0c;安全管理人员等等&#xff0c;但这都仅限于企业“做了”安全生产管理&#xff0c;并不能“做好”安全生产管理。其实做好安全生产管理需要安全管理系统的配合。 听说过EHS系统吗&#xff1f;这系统能帮企…

【Android】在App里面安装Apk文件

项目需求 在一个App里面内置一个第三方的APK文件&#xff0c;然后通过这个App可以安装这个APK文件。 需求实现 1.内置APK文件 在App里面创建一个assets文件夹&#xff0c;然后把想要安装的APK文件放到这里面。 2.定义文件路径访问权限 创建一个文件&#xff0c;命名【file…

springboot系列七: Lombok注解,Spring Initializr,yaml语法

老韩学生 LombokLombok介绍Lombok常用注解Lombok应用实例代码实现idea安装lombok插件 Spring InitializrSpring Initializr介绍Spring Initializr使用演示需求说明方式1: IDEA创建方式2: start.spring.io创建 注意事项和说明 yaml语法yaml介绍使用文档yaml基本语法数据类型字面…

酣客的“FFC模式”|白酒商业模式|分润制度顶层架构设计

酣客公社摒弃传统商业模式&#xff0c;提出“心联网”及“FFC模式”的商业模式。 坐标&#xff1a;厦门&#xff0c;我是肖琳 深耕社交新零售行业10年&#xff0c;主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 今天和大家分享“酣客”的营销模式&#xff…

leetcode 动态规划(基础版)单词拆分

题目&#xff1a; 题解&#xff1a; 一种可行的dp做法是基于完全背包问题&#xff0c;将s看成是一个背包&#xff0c;wordDict看作是物品&#xff0c;然后往s中放入物品判断最终是否可以变为给定的s即可。这道题和上一题都用到了在dp如何枚举连续子串和状态表示&#xff1a;枚…