力扣 11题 盛最多水的容器

ops/2024/10/22 10:43:32/

前言:这道题其实挺有意思的,前段时间在刷视频的时候看都了很多博主都在讲解这道题,最近在写一些算法的东西,我就顺势刷到了这道题。在这里写一写我自己的对这道题的理解。

题目详见:https://leetcode.cn/problems/container-with-most-water/description/

思路:这道题第一眼的直觉直接暴力,必定可以对一部分数据的。

直接秒了,但是......不出意外。。。。

 

超时,其实想想也是肯定的,不然这题不是都傻子吗。 

正确思路:因为棒子有长短,所以在两根棒中间可以盛的水一定是由短的那一根来决定的。所以这个时候我们应该要有一个直觉就是我们在看这一个空间可以盛多少水的时候一定是两个木板一起看的。

这时候其实有一个双指针的算法是很合适去实现的。以最左边索引为0的记为左指针和索引最大的那个为右指针。然后慢慢往里缩例举每种情况可以盛下的水就可以,比较哪个是最多的就可以。

现在要解决的问题就是如何去移动这两个指针,这是最关键的,如何去移动才能避免漏过最大盛水可能情况呢。

1.首先最容易想到的是将左指针和右指针同时向中间移动。但是明显,这是有缺陷的。两边一起往里缩,这样就只是计算了对称的两个木板所能盛的水,万一这个是索引0和索引3形成的是最大盛水量(3不是最大的索引),很容易就淘汰了这种做法。

2.再者,肯定不能盲目的去随意缩进一边指针了,那就要比个大小。假设是以大的哪个缩进一个。但是如何算两个木棒之间的空间的?是以小的那个来决定的,那如果你把大的那个指针缩进去之后那所盛水的体积必定是变小的,你想,长减少了1,然后又把大的那个木板动了,但是小的那个没有动,但是盛水的时候判断的时候是以小的那根判断的,所以你动了大的那根以后,你所可以盛水的体积一定不会比之前的情况大。

综上所述,运用双指针,然后比较左右指针所指向的木棒大小,小的那一根往里动一根。就可以了。具体的动画题解各大平台都有,leetcode官网也给出了详细的题解,若想了解,可以前往那里学习。

附上代码:

class Solution {public int maxArea(int[] height) {int max = -100;int left = 0;int right = height.length-1;while (left != right) {int sum = (right - left) * (height[left] > height[right] ? height[right] : height[left]);if (sum > max) {max = sum;}if (height[left] > height[right]) {right -= 1;} else {left += 1;}if (right==left){break;}}return max;}
}


http://www.ppmy.cn/ops/112856.html

相关文章

EPLAN中如何切换编辑区的背景颜色为黑色?

EPLAN中如何切换编辑区的背景颜色为黑色? 如下图所示,打开EPLAN软件,打开或新建一个项目, 如下图所示,点击选项----设置, 在弹出的窗口中找到用户----图形的编辑------2D,在右侧找到颜色设置---…

Qt之常用控件一

目录 Widget常见属性及其作用 enabled geometry Widget常见属性及其作用 属性作用enabled 设置控件是否可使⽤. true 表⽰可⽤, false 表⽰禁⽤ geometry 位置和尺⼨. 包含 x, y, width, height 四个部分. 其中坐标是以⽗元素为参考进⾏设置的. windowTitle 设置 widg…

华为eNSP使用详解

eNSP(Enterprise Network Simulation Platform)是华为提供的一款网络仿真平台,它允许用户在没有真实设备的情况下进行网络实验和学习网络技术。eNSP可以模拟各种网络设备,如交换机、路由器、防火墙等,并支持创建多种网…

CPU 和 GPU:为什么GPU更适合深度学习?

目录 什么是 CPU ? 什么是 GPU ? GPU vs CPU 差异性对比分析 GPU 是如何工作的 ? GPU 与 CPU 是如何协同工作的 ? GPU vs CPU 类型解析 GPU 应用于深度学习 什么是 CPU ? CPU(中央处理器)…

2024年9月python二级易错题和难题大全(附详细解析)(二)

2024年9月python二级易错题和难题大全(附详细解析)(二) 第1题第2题第3题第4题第5题第6题第7题第8题第9题第10题第11题第12题第13题第14题第15题第16题第17题第18题第19题第20题第1题 1、以下代码的输出结果是() x = 12 + 3 * ((5 * 8) - 14) // 6 print(x) A、25.0 B、6…

如何将镜像推送到docker hub

前言 这一篇应该是最近最后一篇关于docker的博客了,咱来个有始有终,将最后一步——上传镜像给他写完,废话不多说,直接进入正题。 登录 首先需要确保登录才能推送到你的仓库中去,在终端输入docker login,输入用户名和…

SEO之页面优化(一-页面标题2)

初创企业搭建网站的朋友看1号文章;想学习云计算,怎么入门看2号文章谢谢支持: 1、我给不会敲代码又想搭建网站的人建议 2、“新手上云”能够为你开启探索云世界的第一步 博客:阿幸SEO~探索搜索排名之道 (接上一篇。。…

本地镜像发布到阿里云

本地镜像发布到阿里云 登录阿里云容器镜像服务配置 Docker 登录阿里云容器镜像服务标记你的 Docker 镜像推送镜像到阿里云验证使用阿里云镜像注意事项 将 Docker 本地镜像发布到阿里云(Alibaba Cloud)容器镜像服务(Container Registry&#x…