力扣——盛最多水的容器

题目描述:

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

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

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

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

相关文章

最短路径(2.19)

目录 1.网络延迟时间 弗洛伊德算法 迪杰斯特拉算法 2. K 站中转内最便宜的航班 3.从第一个节点出发到最后一个节点的受限路径数 4.到达目的地的方案数 1.网络延迟时间 有 n 个网络节点&#xff0c;标记为 1 到 n。 给你一个列表 times&#xff0c;表示信号经过 有向 边的…

day32贪心算法 part02

贪心系列的时候&#xff0c;题目和题目之间貌似没有什么联系,是真的就是没什么联系&#xff0c;因为贪心无套路,没有个整体的贪心框架解决一系列问题&#xff0c;只能是接触各种类型的题目锻炼自己的贪心思维。贪心只是一类题的统称&#xff0c;并没有什么固定套路。 122. 买卖…

Android NDK底层BUG,记录:connect、socket(AF_INET, SOCK_STREAM, 0) 等系统套接字接口函数崩溃问题。

在 Android NDK 之中&#xff0c;看上去调用 connect、socket 函数是不会崩溃的&#xff0c;但这是否定的&#xff0c;它在特定的情况下存在必定的崩溃的问题。 但是这种情况放到MACOS、LINUX、WINDOWS都不会崩溃&#xff0c;而它崩溃的点出现在操作系统底层。 人们需要参考这…

香橙派企业信用问题-劝一个是一个,别买!!!

1. 背景 香橙派推广旗下AI PRO 开发板&#xff0c;在B站做直播&#xff0c;一场直播两个直播间&#xff0c;分别抽取一名观众&#xff0c;宣传是场场送AI PRO开发板&#xff01;&#xff01;&#xff01; 2. 收到奖品与宣传不符合 3.咨询群主&#xff1a;态度很傲慢&#xff0c…

MES的生产计划管理与ERP的生产计划管理到底有什么不同?

在制造业信息化的道路上&#xff0c;ERP系统和MES系统是两个非常重要的信息化管理工具。大多数制造业企业往往首先考虑上ERP系统&#xff0c;经过一段时间的深度使用后&#xff0c;再引进MES系统进行报工或数采。但我们可以发现&#xff0c;这两个系统都能进行生产管理&#xf…

详细了解网络通信流程、协议组成、编码方式、数据传输方式和途径、Http 协议的编码、cookie的使用和提取路径

详细了解网络通信流程、协议组成、编码方式、数据传输方式和途径、Http 协议的编码、cookie的使用和提取路径。 一、网络通信简介 现代的网络传输介质以以太网链路居多,完整的网络数据报结构大致如下。传输层及其以下的机制由操作系统内核提供,应用层由用户进程提供,应用程…

上位机图像处理和嵌入式模块部署(qmacvisual学习1)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 虽然我们前面学习了很多的知识点&#xff0c;比如说在windows这边&#xff0c;用qt写界面&#xff0c;用opencv写图像处理代码&#xff1b;在linux…

二维码门楼牌管理系统技术服务:构建智慧城市的基石

文章目录 前言一、标准地址设置规则二、门楼牌作为标准地址的法定载体三、二维码门楼牌管理系统技术服务的优势与应用前景 前言 在智慧城市建设的浪潮中&#xff0c;二维码门楼牌管理系统技术服务以其高效、便捷的特性&#xff0c;逐渐成为城市管理的重要工具。本文将深入探讨…

一张草图直接生成视频游戏,谷歌推出生成交互大模型

谷歌DeepMind的研究人员推出了&#xff0c;首个无需数据标记、无监督训练的生成交互模型——Generative Interactive Environments&#xff0c;简称“Genie”。 Genie有110亿参数&#xff0c;可以根据图像、真实照片甚至草图&#xff0c;就能生成各种可控制动作的视频游戏。Ge…

项目可行性方案:人脸识别实现无感考勤的项目技术可行性方案

目 录 1.引言 1.1编写目的 1.2背景 2.可行性研究的前提 2.1要求 2.2目标 3.对现有系统的分析 3.1系统改进示意图 3.2改进之处 3.3技术条件方面的可行性 4.结论 1.引言 1.1编写目的 本报告编写的目的是探究学校里对教室和办公室内教师的人脸进行识别从而…

Linux --- 应用层 | HTTP | HTTPS

前言 前面写的TCP/UDP客户端在访问服务端的时候&#xff0c;需要输入ip地址和端口号才可以访问&#xff0c; 但在现实中&#xff0c;我们访问一个网站是直接输入的一个域名&#xff0c;而不是使用的ip地址端口号。 比如在访问百度 https://www.baidu.com/的时候&#xff0c; …

2024最新AI系统ChatGPT网站源码, AI绘画系统

一、前言说明 R5Ai创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GP…

CVE-2024-23334 AIOHTTP 目录遍历漏洞分析

漏洞描述&#xff1a; aiohttp 是一个用于 asyncio 和 Python 的异步 HTTP 客户端/服务器框架。使用aiohttp作为Web服务器并配置静态路由时&#xff0c;需要指定静态文件的根路径。此外&#xff0c;选项“follow_symlinks”可用于确定是否遵循静态根目录之外的符号链接。当“f…

css样式元素的相对定位,绝对定位,固定定位等元素定位运用技巧详解

文章目录 1.相对定位 relative2.绝对定位 absolute3.固定定位4.display 转换元素5.float浮动6.float产生内容塌陷问题7.overflow CSS样式学习宝典&#xff0c;关注点赞加收藏&#xff0c;防止迷路哦 在CSS中关于定位的内容是&#xff1a;position:relative | absolute | static…

Unreal触屏和鼠标控制旋转冲突问题

Unreal触屏和鼠标控制旋转冲突问题 鼠标控制摄像机旋转添加Input轴计算旋转角度通过轴事件控制旋转 问题和原因问题原因 解决办法增加触摸控制旋转代码触屏操作下屏蔽鼠标轴响应事件 鼠标控制摄像机旋转 通过Mouse X和Mouse Y控制摄像机旋转。 添加Input轴 计算旋转角度 通过…

SpringBootWeb快速入门

1.创建springboot工程&#xff0c;新建module 2.勾选web开发相关依赖 3.删除多余文件 4.新建类 5.启动类中运行main方法 6.启动 默认端口号8080 7.打开浏览器&#xff0c;地址栏输入 8.报错 9.原因&#xff0c;控制层位置放错&#xff0c;剪切controller层放进com.example …

[vue error] TypeError: Components is not a function

问题详情 问题描述: element plus按需导入后&#xff0c;启动项目报错&#xff1a; 问题原因 unplugin-vue-components插件版本问题 查看 unplugin-vue-components插件可以发现版本太高了 问题解决 unplugin-vue-components 版本高了&#xff0c;我用的0.26.0&#xff0c…

【STM32+HAL】姿态传感器陀螺仪MPU6050模块

一、准备工作 有关OLED屏初始化的问题&#xff0c;详见【STM32HAL】OLED显示初始化配置 二、所用工具 1、芯片&#xff1a;STM32F10C8T6 2、CUBEMX配置软件 3、 6 轴运动处理组件MPU6050 三、实现功能 OLED屏显示姿态角 四、HAL配置步骤 1、开启I2C1进行MPU6050通信 2、开…

供应链管理(SCM):界面设计全面扫盲,得供应链者得天下

大家伙&#xff0c;我是大千UI工场&#xff0c;专注UI分享和项目接单&#xff0c;本期带来供应链系统的设计分享&#xff0c;欢迎大家关注、互动交流。 一、什么是SCM SCM系统是供应链管理&#xff08;Supply Chain Management&#xff09;系统的缩写。供应链管理是指协调和管…

【笔记版】edgecore.yaml分析总结

1. 文件路径 /etc/kubeedge/config edgecore.yaml是该目录下唯一的文件 附上链接&#xff1a;edgecore.yaml 2. 文件生成方式 2.1 方式一 使用keadm安装部署的方式&#xff0c;执行完keadm join --cloudcore-ipportcloudcore监听的IP地址:端口&#xff08;默认为10002&…