双指针练习:盛水最多的容器

题目链接:11.盛水最多的容器

题目描述:

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

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

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

说明:你不能倾斜容器。

解法一(暴力求解)(会超时):

算法思路:

枚举出能构成的所有容器,找出其中容积最大的值。

容器容积的计算方式:

·设两指针 i,j,分别指向水槽版的最左端以及最右端,此时容积宽度为 j - i。由于容器的高度由两板中的短板决定,因此可得容积公式:v = (j - i) * min(height[i] , height[j])

算法代码:

class Solution {
public:int maxArea(vector<int>& height) {int n = height.size();int ret = 0;//两层 for 枚举出所有可能出现的情况for(int i = 0;i < n;i++){for(int j = i + 1;j < n;j++){//极端容积,找出最大的那一个ret = max(ret,min(height[i],height[j])*(j - i));}
}return ret;}
};

解法二(对撞指针):

算法思路:

设两个指针left 和 right 分别指向容器的左右两个端点,此时容器的容积:

v = (right - left) * min ( height[right] , height[left] )

容器的左边界为 height[left] ,右边界为 height[right]。

然后我们利用单调性解决此题

我们先举一个例子:

计算初始体积 v1 = (right - left)*min(height[left] , height [right])

接着我们观察:v = 高 * 宽,我们的目的是找最大容积,因此我们可以多举几个

例子,观察规律:

通过移动指针来进行下一个容积的计算:令高为high,宽为width

首先,我们计算初始容积 v = 5 * 6 = 30

无论我们移动left 还是right ,宽度width都会变小

        如果移动left,width变小,高也会变小(6 -> 2)

        如果移动right,width变小,高也会变小(6 -> 4)

由此可看无论怎么移动 v 都会变小,这里可以总结一个规律:如果移动之后的数,小于left与right原先所对应的值,那么这个新的v,一定比原来小 

如果移动之后的数比原来的大,那么高度是不变的,width是变小的,因此v变小

因此,总结出两种情况;

        v = high*width

        1️⃣high 不变 ,width减小 ,v减小        

        2️⃣high减小,width减小,v减小

我们假设左边界最小,那么此时移动left,遇到的数比left大,就会改变高度最小值(2->5),这样v就有可能增大

当我们不断重复上述过程,每次都可以舍去大量不必要的枚举过程,直到left 与 right相遇,期间产生的所有容积里面的最大值,就是最终答案

class Solution {
public:int maxArea(vector<int>& height) {int left = 0,right = height.size()-1,ret = 0;//容器体积一定大于0,所以这里可以设置为0while(left < right){//记录v的值//学会使用库函数,max,minint v = min(height[left],height[right]) * (right - left);ret = max(ret,v);//找大值,并更新if(height[left] <= height[right]){left++;}else right--;}return ret;}
};

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

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

相关文章

【多模态】34、LLaVA-v1.5 | 微软开源,用极简框架来实现高效的多模态 LMM 模型

文章目录 一、背景二、方法2.1 提升点2.2 训练样本 三、效果3.1 整体效果对比3.2 模型对于 zero-shot 形式的指令的结果生成能力3.3 模型对于 zero-shot 多语言的能力3.4 限制 四、训练4.1 数据4.2 超参 五、代码 论文&#xff1a;Improved Baselines with Visual Instruction …

python编程:SQLite 管理图片数据库

在本博客中&#xff0c;我们将介绍如何使用 wxPython 和 sqlite3 模块构建一个 GUI 应用程序&#xff0c;该程序可以遍历指定文件夹中的所有图片&#xff0c;并将其信息存储到 SQLite 数据库中。 C:\pythoncode\new\InputImageOFFolderTOSqlite.py 项目简介 我们的目标是创建…

微信里的东西怎么打印出来呢

随着微信的普及&#xff0c;我们的日常生活和工作都离不开这个强大的社交工具。无论是重要的工作文件、孩子的作业、还是精彩的旅行照片&#xff0c;我们都习惯在微信里保存和分享。但是&#xff0c;当需要将这些微信里的内容打印出来时&#xff0c;很多人可能会感到困惑和麻烦…

电力能源指挥中心调度台解决方案主要关注的问题

调度台是指挥中心不可或缺的设备&#xff0c;随着信息化建设的不断深入&#xff0c;电力能源指挥中心已成为重要平台。因此&#xff0c;构建一套高效、智能的电力能源指挥中心调度台解决方案&#xff0c;需要关注以下关键问题&#xff1a; 一、实时监控与数据采集 电力能源指挥…

【AI 大揭秘】ChatGPT 写作绝技与必备提示词大全

利用ChatGPT撰写文章是一种极具创意的方法&#xff0c;它能显著提升您的写作效率&#xff0c;并帮助您创作出高质量的内容。通过人工智能的辅助&#xff0c;您可以迅速、便捷地生成精美文章&#xff0c;或至少为您的下一个写作项目提供灵感。 不管您是在撰写文章、剧本还是电子…

react路由参数path不再支持正则?比较v5和v6写法的差异性

文章目录 前言v5方式&#xff1a;直接在path参数中&#xff0c;写入对应正则&#xff08;1&#xff09;代码详细注释如下&#xff08;2&#xff09;页面输出如下&#xff0c;会出现undefined的情况 v6方式: 在路由对象中配置&#xff0c;但只可配动态路由&#xff0c;不可用正则…

TH方程学习(4)

一、背景介绍 在本节将会对TH方程打包成一个函数&#xff0c;通过输入目标星的轨道要素&#xff0c;追踪星在目标星VVLH坐标系下的相对位置和速度&#xff0c;以及预报的时间&#xff0c;得到预报时刻追踪星在VVLH坐标系下的位置和速度&#xff0c;以及整个状态转移矩阵。 合并…

替换所有的问号 ---- 模拟

题目链接 题目: 分析: 我们只需要遍历字符串, 将所有?进行修改即可但是需要判断, 修改的字符不能和前面后面重复同时, 有一个细节需要处理, 就是当?在最前面时, 没有前面的符号需要判断 在最后面的时候, 没有后面的字符需要判断 代码: class Solution {public String mod…

Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…

打造智能化未来:智能运维系统架构解析与应用实践

在数字化转型的大背景下&#xff0c;智能运维系统成为了企业提升效率、降低成本、增强安全性的关键利器。本文将深入探讨智能运维系统的技术架构&#xff0c;介绍其核心要素和应用实践&#xff0c;帮助读者全面了解智能运维系统的概念、优势和应用价值。 ### 1. 智能运维系统的…

如何进入 -MGMTDB目录

想想这个问题&#xff0c;大家可能觉得很简单吧&#xff0c;先不看答案&#xff0c;你试一试如何进去 1.问题现象&#xff1a; 我直接进入&#xff1a; cd -MGMTDB 直接就报错了&#xff1a; [gridhost03 _mgmtdb]$ cd -MGMTDB -bash: cd: -M: invalid option cd: usage: c…

Mujoco仿真【xml文件的学习 4】

在学习Mujoco仿真的过程中&#xff0c;mujoco的版本要选择合适。先前我将mujoco的版本升级到了mujoco-3.1.4&#xff0c;在运行act的仿真代码时遇到了问题&#xff0c;撰写了博客&#xff1a; Aloha机械臂的mujoco仿真问题记录-CSDN博客 下面在进行mujoco仿真时&#xff0c;统…

十_信号3-可重入函数

如上图所示链表&#xff0c;在插入节点的时候捕获到了信号&#xff0c;并且该信号的自定义处理方式中也调用了插入节点的函数。 在main函数中&#xff0c;使用insert向链表中插入一个节点node1&#xff0c;在执行insert的时&#xff0c;刚让头节点指向node1以后(如上图序号1)&…

linux系统下,mysql增加用户

首先&#xff0c;在linux进入mysql mysql -u root -p 然后查看当前用户&#xff1a; select user,host from user; 增加用户语句&#xff1a; CREATE USER 用户名host范围 IDENTIFIED BY 密码;

【C++】C++入门1.0

鼠鼠最近在学C&#xff0c;那么好&#xff0c;俺来做笔记了&#xff01; 目录 1.C关键字(C98) 2.命名空间 2.1.命名空间定义 2.2.命名空间的使用 3.C的输入&&输出 4.缺省参数 4.1缺省参数概念 4.2.缺省参数的分类 5.函数重载 5.1.函数重载概念 5.2.C支持函数…

深度学习-04-数值的微分

深度学习-04-数值的微分 本文是《深度学习入门2-自製框架》 的学习笔记&#xff0c;记录自己学习心得&#xff0c;以及对重点知识的理解。如果内容对你有帮助&#xff0c;请支持正版&#xff0c;去购买正版书籍&#xff0c;支持正版书籍不仅是尊重作者的辛勤劳动&#xff0c;也…

所有人都可以做的副业兼职,短剧推广,1天挣几百,附详细方法!

自从上次向大家介绍了短剧掘金项目以来&#xff0c;便陆续收到了众多朋友的询问&#xff1a;现在是否还能加入短剧掘金的大军&#xff1f;答案是肯定的。目前&#xff0c;无论是各大视频平台还是其他渠道&#xff0c;短剧掘金项目都呈现出蓬勃发展的态势。而且&#xff0c;相关…

SSM高校社团管理系统-计算机毕业设计源码86128

目 录 摘要 1 绪论 1.1研究背景与意义 1.2开发现状 1.3研究方法 1.4 ssm框架介绍 1.5论文结构与章节安排 2 高校社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1 功能性分…

QT实现动态翻译切换

1、实现QT动态中英文切换效果 效果如下: 2、原理 因为软件本身就是中文版,所以只需准备一个英文版的翻译即可,,那就是将所有需要翻译的地方用tr包裹,然后首先执行lupdate更新一下,接着用qt的翻译软件 Qt Linguist打开ts文件进行翻译,然后保存,最后使用 lrelease发布一…

位运算专题

常见位运算总结: 1. 基础位运算 << 左移 >> 右移 ~ 按位取反 & 按位与 口诀: 有0则0 | 按位或 口诀: 有1则1 ^ 异或 口诀:相同为0,相异为1 / 无进位相加 2. 位运算的优先级 做题时, 能加括号就加括号, 无需管优先级如何 3. 给一个二进制数n, 确定…