【Hot100算法刷题集】双指针-02-盛水最多的容器(含暴力枚举、双指针法及其合理性证明)

news2024/11/26 10:30:06

在这里插入图片描述

🏠关于专栏:专栏用于记录LeetCode中Hot100专题的所有题目
🎯每日努力一点点,技术变化看得见

题目转载

题目描述

🔒link->题目跳转链接
给定一个长度为 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 2 2 <= n <= 1 0 5 10^5 105
0 0 0 <= height[i] <= 1 0 4 10^4 104

解题思路及代码

暴力枚举法

既然要求两条线构成的最大容积,那就计算这些线两两构成的容积大小,以得到最大的容积。这个方法只需要两层for循环即可,算法复杂度为 O ( N 2 ) O(N^2) O(N2)。但这个算法的时间复杂度过高,最终会导致超时。

💡tips:这里计算容积时,使用的是高度×底部宽度。容器的高度取决于所有高度中较小的那一个。

class Solution {
public:
    int maxArea(vector<int>& height) {
        int maxCap = 0;
        for(int i = 0; i < height.size(); i++)
        {
            for(int j = i + 1; j < height.size(); j++)
            {
                int capacity = min(height[i], height[j]) * (j - i);
                maxCap = max(maxCap, capacity);
            }
        }
        return maxCap;
    }
};

双指针法

若定义两个变量left=0,right=height.size()-1,则可以得到由最左和最右两条线所构成的容积,即min(height[left], height[right]) * (right - left)。不管是left或right向内移动一格,宽度均会变小,故此时应当让height[left]和height[right]中小的那一个向内移动,因为宽度减小需要高度增加来补充;而当前高度受限于height[left]和height[right]中小的那一个,若小的线不发生改变,而缩小宽度,则容积只会变小;故每次只要将小的那一边向内移动即可。

下面通过示例1:[1,8,6,2,5,4,8,3,7]执行过程图,演示上述算法描述:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

class Solution {
public:
    int maxArea(vector<int>& height) {
        int maxCap = 0;
        int left = 0, right = height.size() - 1;
        while(left < right)
        {
            int capacity = min(height[left], height[right]) * (right - left);
            maxCap = max(maxCap, capacity);
            if(height[left] > height[right]) --right;
            else ++left;
        }
        return maxCap;
    }
};

刷题使我快乐😭
文章如有错误,请私信或在下方留言😀

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

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

相关文章

Linux系统部署SmartKG(知识图谱安装)

基本要求 #docker需要高版本 Docker version 20.10.14, build a224086docker 20.10.14离线安装 SmartKG官网 官方详细文档 下载部署包 SmartKG官网 准备部署 #上传到服务器 [roottest-server01 opt]# ll SmartKG-master.zip -rw-r--r-- 1 root root 79708691 Sep 11 17:4…

网络层协议介绍

目录 一、网络层的功能 二、ip数据包格式 三、ICMP协议&#xff08;Internet控制报文协议&#xff09; 3.1功能 3.2 ping命令 3.2.1ping命令的用法 3.2.2扩展 3.3 tracert命令&#xff08;windows&#xff09; 四、arp协议 4.1ARP协议是如何工作的 4.2工作原理&#x…

解码未来:H.265与H.266技术对比及EasyCVR视频汇聚平台编码技术优势

随着视频技术的不断发展&#xff0c;视频编码标准也在不断更新迭代。H.265&#xff08;也称为HEVC&#xff0c;High Efficiency Video Coding&#xff09;和H.266&#xff08;也称为VVC&#xff0c;Versatile Video Coding&#xff09;作为当前和未来的主流视频编码标准&#x…

本地部署大语言模型详细讲解

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 本地部署大语言模型&#xff08;LLM&#xff0c;Large Language Model&#xff09;需要相应的硬件资源和技术栈支持&#xff0c;如GPU计算能力、大量内存、存储空间&#xff0c;以及模型部署框架。以下是如…

46页PPT说清楚数据资产目录建设,数据资产目录建设方案

数据资产管理的必要性 为了更好地管理和利用这些资产&#xff0c;构建一个全面的数据资产目录变得至关重要。本方案旨在通过一系列策略和步骤&#xff0c;帮助企业实现数据资产的有效管理和利用。政策层面&#xff0c;数据已被纳入生产要素&#xff0c;强调了数据安全与保护的…

Qt 中openMp 配置

Qt 中openMp 配置 前言 openMP是使用CPU进行并行计算&#xff0c;在实际项目中处理耗时的for循环等&#xff0c;简单有效&#xff0c;本文记录下使用Qt \C项目开发时如何配置openMP 二、工程配置 1.Qt Creator pro工程 区分编译器&#xff0c;配置pro文件 MSVXXX编译器&am…

Adobe Firefly 视频模型测试版即将推出,具备文本、图像或视频添加元素的多种功能

Adobe Firefly Video 是一款由 Adobe 推出的新型人工智能视频生成模型&#xff0c;旨在为视频专业人士提供强大的创意工具&#xff0c;该模型计划在年底前推出。 演示视频在喜好儿网 Firefly Video 模型具备多种功能&#xff0c;包括从文本生成视频、图像生成视频或视频添加元…

I2C-Tools的安装与使用方法(详解,一篇教会你熟练使用)

1.前言&#xff1a; i2c-tools是一个开源的I2C总线工具集&#xff0c;它包括了用于访问和操作I2C设备的各种命令行工具。这些工具可以帮助用户读取和写入I2C设备的数据&#xff0c;检测和诊断I2C总线的问题等。 2.各系统的安装&#xff1a; 接下里会展示在不同操作系统中如何使…

00 目前大模型介绍

1 大模型种类 目前 主流的开源模型体系 分三种&#xff1a; 第一种&#xff1a; prefix Decoder 系 代表模型&#xff1a; ChatGLM 、ChatGLM2&#xff0c;第二种&#xff1a; causal Decoder 系 &#xff1a; LLaMA-7B 、 LLaMa 衍生物、Bloom,第三种&#xff1a;Encoder-De…

企业ESG表现、制造业的数字化转型及其高质量发展(2011-2022年)

在当今全球经济一体化的背景下&#xff0c;企业不仅要追求经济效益的最大化&#xff0c;还要关注环境、社会和治理&#xff08;ESG&#xff09;的表现&#xff0c;以及通过数字化转型实现高质量的发展。本文将基于2011-2022年的数据&#xff0c;探讨企业ESG表现与制造业数字化转…

pcs升压变流一体机

在当今全球积极推进能源转型的大背景下&#xff0c;新能源技术的发展日新月异。其中&#xff0c;PCS 升压变流一体机作为一种关键的能源转换设备&#xff0c;正发挥着越来越重要的作用。它一般可分为10KV与35KV等级的。 PCS 升压变流一体机&#xff0c;全称为 Power Conversion…

外卖跑腿APP开发详解:基于同城O2O系统源码的实现路径

近年来&#xff0c;随着O2O&#xff08;OnlinetoOffline&#xff09;模式的普及和发展&#xff0c;外卖跑腿服务已经成为了生活中不可或缺的一部分。外卖跑腿APP通过将用户、商家和骑手三方紧密连接&#xff0c;解决了用户日常所需的各种服务需求&#xff0c;为企业提供了新的商…

web基础之RCE

简介&#xff1a;RCE称为远程代码执行漏洞&#xff1b;是互联网的一种安全漏洞&#xff1b;攻击者可以直接向后台服务器远程注入操作系统命令&#xff1b;从而操控后台系统&#xff1b;也是CTF比较常考的一个方面 1、eval执行 &#xff08;1&#xff09;分析后端代码&#xf…

价值共创撬动产业增量,用友交出一份共赢的“生态答卷”

前言 在企业服务赛道&#xff0c;什么样的生态是产业更需要&#xff0c;伙伴更欢迎的&#xff1f; 看营收&#xff0c;伙伴数量还是伙伴收益&#xff1f; 用友的答案是&#xff1a;客户价值。 用客户价值这把标尺重新审视&#xff0c;企业服务生态值得重塑一遍。 尽管相比…

排班系统|基于Springboot+vue的医护人员排班系统(源码+数据库+文档)

排班系统|医护人员排班系统 目录 基于Springbootvue的医护人员排班系统 一、前言 二、系统设计 三、系统功能设计 医护类型管理 排班类型管理 科室信息管理 医护信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&…

【文件系统】Linux ext2

目录 1. 认识磁盘1.1 结构组成1.2 抽象磁盘结构1.3 磁盘内的寄存器 2. Linux ext2 文件系统2.1 Data blocks && inode Table2.2 Block Bitmap && inode Bitmap2.3 Group Descriptor Table && Super Block 1. 认识磁盘 虽然我们现在个人计算机基本都使…

安卓手机如何轻松设置代理IP?IPXProxy详细步骤指南!

​对于一些安卓用户来说&#xff0c;使用代理IP不仅能有效提高网络连接的速度&#xff0c;还能访问特定地区的网站或内容。不过&#xff0c;大部分人都会通过电脑或浏览器来配置代理IP&#xff0c;对于手机设置代理IP的步骤不太了解。本文将为大家详细介绍安卓手机设置代理IP的…

html+css+js网页设计 旅游 龙门石窟4个页面

htmlcssjs网页设计 旅游 龙门石窟4个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#…

ADL电源维修GX120/200离子源放电电源维修

ADL溅射电源维修&#xff1b;ADL镀膜电源维修&#xff1b;直流溅射电源维修全系列型号。 GX50–GX150特点&#xff1a;GX溅射电源能够自动擦除达每秒80000个弧。很好的性能&#xff0c;加上小尺寸&#xff0c;是GX系列的突出标志。同时设备可以全额定功率运行&#xff0c;不切…

未来五年,掌握IPD的产品团队将引领创新潮流

在激烈的市场竞争中&#xff0c;企业要保持稳健发展&#xff0c;必须建立敏锐的市场感知能力和灵活的应对策略。团队需要培养对市场变化的洞察力&#xff0c;及时识别潜在风险和新兴机遇&#xff0c;以确保能够在行业内部树立典范。面对市场的快速变化&#xff0c;企业需精确把…