力扣——盛最多水的容器

题目描述:

给定一个长度为 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 <= 1e5
  • 0 <= height[i] <= 1e4

一开始看这道题的时候,以为是动态规划,没想到是贪心!所以,求解本题的关键是,找到贪心的方法。

方法:当我们寻找最大容量时,可以从两边开始,然后向中间靠(我们知道,容器的体积取决于短边的长度),向中间靠意味着长方形的宽一定会变小(把容器的侧截面看作是长方形)

1、如果是长边向内,如果下一条是更长边,那对整个容器的长不起作用,因为容器的体积取决于短边,但是宽变小,所以此时容器的体积一定变小;如果下一条是更短边,那整个容器的短边就更短,并且宽变小,则整个容器的体积就会更小。所以长边向内,容器体积一定会变小

2、如果是短边向内,如果下一条是更长边,那此时容器的短边就会更新,变成min(原来的长边,此时的新长边),但是向中间靠会使长方形的宽变小,但是长变大了,所以整个容器可能会变大,但是这就给我们提供了贪心的机会,有机会变大;如果下一条是更短边,那容器的体积就一定会变小;

综上所述,只有当短边向内的时候,容器的体积才有变大的可能性,所以我们设立两个指针,每次判断哪边是短边,然后一步一步向内靠拢即可;


AC代码:

class Solution {
public:
    int maxArea(vector<int>& height) 
    {
        int len = 0;
        len = height.size();
        int i=0, j=len-1;//i左指针,j右指针
        int v=0;//容量
        int _min =0;
        while(i<j)
        {
            _min = height[i] < height[j] ? height[i] : height[j];
            v = v > _min * (j - i) ? v : _min * (j - i);
            if(height[i]<height[j])i++;
            else j--;
        }
        return v;
    }
};

可能大家还有几点疑惑:

1、我们能不能从中间向两边扩展,这样不是更容易使容器的体积变大吗?当从中间向两边扩展时,那长方形的宽一定变大,则体积的大小完全取决于两边中的更短边,跟上面一样分析;

如果是长边向外,如果下一条是更长边,那对整个容器的长也不起作用,但宽变大,所以容器的体积一定变大;如果下一条是更短边,那整个容器的短边就更短,但宽变大,所以此时并不能判断容器体积变大还是变小;

如果是短边向外,如果下一条是更长边,那此时容器的短边就会更新,变成min(原来的长边,此时的新长边),宽变大,长也变大了,所以容器一定会变大;如果下一条是更短边,但宽变大,所以此时并不能判断容器体积变大还是变小;

综上可知,此时无论是移动长边还是短边,都是可能让容器体积变大或变小,所以这种方法不行。

2、另一个知识点是C++的三木运算符: condition ? expression1 : expression2;这个很简单

举个例子:z = x > y ? x : y ,意思是判断x和y谁更大,如果x更大,则x>y成立,把x赋值给z,否则z=y;

希望能帮助到大家!谢谢~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文笔记】Gemma: Open Models Based on Gemini Research and Technology

Gemma 日期: March 5, 2024 平台: CSDN, 知乎 状态: Writing Gemma: Open Models Based on Gemini Research and Technology 谷歌最近放出的Gemma模型【模型名字来源于拉丁文gemma&#xff0c;意为宝石】采用的是与先前Gemini相同的架构。这次谷歌开源了两个规模的模型&…

Golang Copy()方法学习

前言 主要是涉及到深浅拷贝相关的&#xff0c;但是在看的一个资料过程中发现他有错…并且一系列&#xff0c;复制粘贴他的&#xff0c;也都错了。 错误文章指路 很显然&#xff0c;Copy是深拷贝啊&#xff01;&#xff01;&#xff01; Copy功能 copy的代码很少&#xff0c…

MySQL基础-----SQL语句之DQL数据查询语句(上篇)

目录 前言 select基本语法 一、基础查询 1.查询多个字段 2.字段设置别名 3.去除重复记录 案例 二、条件查询 1.语法 2.条件 案例 三、聚合函数 1.聚合函数 2.语法 案例 前言 前面我们学习了DML和DDL语句&#xff0c;那么本期我们学习数据查询的语句&#xff08;DQ…

启英泰伦「离线自然说」:让照明语音交互更自然、更便捷

随着科技的不断发展&#xff0c;智能家居已经成为现代生活的一部分。其中&#xff0c;智能照明作为智能家居的重要组成部分&#xff0c;为人们带来了更加便捷、舒适的照明体验。然而&#xff0c;传统的离线语音交互技术在智能照明领域的应用一直受到词条存储量的限制&#xff0…

把握职场脉搏,明智选择赛道

选择比努力更重要。男怕入错行&#xff0c;进入IT行业的你已经成功一半了&#xff0c;但IT业也细分了诸多赛道&#xff0c;应该如何兼顾选择呢&#xff1f;在快速发展的科技行业中&#xff0c;程序员面临着众多选择。如何选择最适合自己的职业赛道&#xff0c;成为许多程序员关…

Verilog Coding Styles For Improved Simulation Efficiency论文学习记录

原文基于Verilog-XL仿真器&#xff0c;测试了以下几种方式对仿真效率的影响。 1. 使用 Case 语句而不是 if / else if 语句 八选一多路选择器 case 实现效率比 if / else if 提升 6% 。 2. 如果可以尽量不使用 begin end 语句 使用 begin end 的 ff 触发器比不使用 begin end …

校园气象站—为学校的科普教育提供有力的支持

TH-XQ3校园气象站是一种针对校园环境的气象监测设备&#xff0c;通过现场自动监测的方式&#xff0c;对雨量、风向、风速、气温、相对湿度、气压、太阳辐射、噪声等气候要素进行全天候现场监测&#xff0c;同时将监测数据及时传递给学生和校园管理人员。校园气象站的建设不仅可…

python使用zmail实现邮件发送

一&#xff1a;zmail介绍 1、Zmail的优势 自动填充大多数导致服务端拒信的头信息&#xff08;From To LocalHost之类的)将一个字典映射为email&#xff0c;构造信件就像构造字典一样简单自动寻找邮件服务商端口号地址&#xff0c;自动选择合适的协议&#xff08;经过认证的&am…

哪款立体学习灯值得买!五款热门立体学习灯测评集锦!

大路灯作为专业的照明工具&#xff0c;能够帮助我们改善光线环境、提高用眼的舒适度&#xff0c;改善用眼疲劳&#xff0c;也因此备受很多群众欢迎&#xff0c;普及率日渐上升。但大路灯市场快速发展的背后&#xff0c;也涌现了大量劣质不专业产品&#xff0c;比如网红或跨界大…

【短时交通流量预测】基于Elman神经网络

课题名称&#xff1a;基于Elman神经网络的短时交通流量预测 版本时间&#xff1a;2023-04-27 代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 模型简介&#xff1a; 城市交通路网中交通路段上某时刻的交通流量与本路段前几个时段的交通流量有关&#…

华为认证HCIA\HCIP\HCIE考试费用是多少?

华为认证有HCIA、HCIP、HCIE这三个等级的认证&#xff0c;HCIA和HCIP只考笔试&#xff0c;HCIE考笔试和实验。不同方向的认证考试科目和费用会有些不同。 HCIA笔试考试费用是200美元。 每个方向的HCIP考试科目不同&#xff0c;有的方向需要考一门&#xff0c;有的方向需要考…

CSDN的默认markdown教程

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Java实现手机库存管理

一、实验任务 编写一个程序&#xff0c;模拟库存管理系统。该系统主要包括系统首页、商品入库、商品显示和删除商品功能。每个功能的具体要求如下&#xff1a; 1.系统的首页&#xff1a;用于显示系统所有的操作&#xff0c;并且可以选择使用某一个功能。 2.商品入库功能&…

UE4c++ 材质功能大全(想起来就补充一个)

前言&#xff1a;才想起写一个这个文档&#xff0c;前期内容较少&#xff0c;其他内容&#xff0c;我也只会想起来加一加&#xff01; 材质功能大全 竖直百分比进度HSV To RGBRGB转灰度值AlphaComosote(Premultiplied Alpha&#xff09;预乘 转 Translucent &#xff08;sRGB与…

【linux】linux系统调用及文件IO操作

一、系统调用 1、概述 系统调用&#xff1a; 就是操作系统内核 提供给用户可以操作内核 一组函数接口。用户 借助 系统调用 操作内核。比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件&#xff0c;可以通过时钟相关的系统调用获得系统时间或设置定时…

win中删除不掉的文件,火绒粉碎删除亲测有效

看网上的 win R 然后终端输入什么删除的&#xff0c;照做了都没有删掉 有火绒的可以试试&#xff1a; 拖进去就删掉了 很好使

NTFS Disk by Omi NTFS for mac v1.1.4中文版

NTFS Disk by Omi NTFS for Mac&#xff1a;NTFS文件系统的无缝桥梁 软件下载&#xff1a;NTFS Disk by Omi NTFS for mac v1.1.4中文版 &#x1f310; 跨平台访问&#xff0c;文件无阻 NTFS Disk by Omi NTFS for Mac 为您的Mac提供了对NTFS文件系统的无缝访问。无论您是在Win…

通过联合部署DDoS高防和WAF提升网站防护能力

如果您的网站遭受的攻击既有流量型攻击&#xff0c;又混杂精巧的Web应用层攻击时&#xff08;例如SQL注入、跨站脚本攻击、命令注入等&#xff09;时&#xff0c;推荐您组合使用阿里云DDoS高防和Web 应用防火墙 WAF&#xff08;Web Application Firewall&#xff09;&#xff0…

demo破坏升级

如果我们刚才所解释的dom破坏形式不再是单纯的x一层结构&#xff0c;而是x&#xff0c;y这种形式&#xff0c;两层结构&#xff0c;我们该怎么办 举个例子吧 我们的想法是先取x再取y&#xff0c;想法很简单&#xff0c;现实很苦感&#xff0c;看看结果吧 取出来的是undefined…

stm32flash模拟eeprom

stm32f103CB的flash是128k&#xff08;起始地址是 0x08000000 到 0x0801FFFF&#xff09; falsh的末地址是0x801FFFF&#xff0c;即倒数一页是0x801FBFF&#xff08;1页按照1kB1024B来算&#xff09; stm32f103参考手册stm32f103cb.pdf stm32的FLASH分为主存储块和信息块&…