力扣 11题 盛最多水的容器

news2024/12/26 14:20:34

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

题目详见: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.coloradmin.cn/o/2144868.html

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

相关文章

【DAY20240918】03教你轻松配置 Git 远程仓库并高效推送代码!

文章目录 前言 git diff一、远程仓库?1、在 Gitee 上新建仓库:2、Git 全局设置:3、添加远程仓库:4、推送本地代码到远程仓库:5、输入用户名和密码:6、后续推送: 二、全情回顾三、参考 前言 git …

谷歌浏览器扩展程序怎么提升CSS开发效率

在现代Web开发中,CSS(层叠样式表)是不可或缺的一部分,它负责网页的视觉呈现和布局设计。为了提高CSS开发的效率,谷歌浏览器提供了许多实用的扩展程序。本文将介绍几个关键的扩展程序,并探讨如何利用它们来优…

网络安全学习(五)Burpsuite实战

bp功能确实强大,记录一个bp手机验证码的实例。 当然,首先要打开bp,设置好浏览器的代理。 浏览器访问实例网址www.xxx.com(隐藏真实网址)。 真实网址有个注册功能,需要手机验证码。 好的,我们…

深入探索Android开发之Java核心技术学习大全

Android作为全球最流行的移动操作系统之一,其开发技能的需求日益增长。本文将为您介绍一套专为Android开发者设计的Java核心技术学习资料,包括详细的学习大纲、PDF文档、源代码以及配套视频教程,帮助您从Java基础到高级特性,再到A…

『功能项目』回调函数处理死亡【54】

我们打开上一篇53伤害数字UI显示的项目, 本章要做的事情是使用回调函数处理怪物Boss01死亡后增加主角经验值的功能,以及生成一个七秒的升级特效 首先增加一个技能特效重命名为PlayerUpGradeEffect 修改脚本:BossCtrl.cs 修改脚本&#xff1a…

SpringBoot2:web开发常用功能实现及原理解析-@ControllerAdvice实现全局异常统一处理

文章目录 前言1、工程包结构2、POM依赖3、Java代码 前言 本篇主要针对前后端分离的项目,做的一个统一响应包装、统一异常捕获处理。 在Spring里,我们可以使用ControllerAdvice来声明一些关于controller的全局性的东西,其用法主要有以下三点…

PostgreSQL技术内幕11:PostgreSQL事务原理解析-MVCC

文章目录 0.简介1.MVCC介绍2.MVCC常见的实现方式3.PG的MVCC实现3.1 可见性判断3.2 提交/取消 0.简介 本文主要介绍在事务模块中MVCC(多版本并发控制)常见的实现方式,优缺点以及PG事务模块中MVCC(多版本并发控制)的实现。 1.MVCC…

1×1卷积核【super star 卷积核】

一、11卷积的作用 我们先来给出11卷积的一般作用,如下所示: • 跨通道的特征整合 • 特征通道的升维与降维 • 减少权重参数(卷积核参数) 【 简化模型 】 1.1 特征通道的升维与降维/跨通道的特征整合/简化模型 输入数据&…

【Transformer深入学习】之一:Sinusoidal位置编码的精妙

看苏神的文章提到:Transformer原论文使用Sinusoidal位置编码,作为位置编码的一个显式解,Google 在原论文中对它的描述寥寥无几,只是简单提及了它可以表达相对位置信息,并未提及这个编码的合理性。 看了几篇文章&#x…

JAVA零基础入门——面向对象

1.继承 1.1 继承概念 继承的概念:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。我们将"继承概念"分为两类:…

WINDOWS AGENTARENA:EVALUATING MULTI-MODAL OS AGENTS AT SCALE论文学习

文章开头说现有的agent都是局限于特定领域(什么网络问答啊,仅限文字啊,仅限于某一个app啊)这样的,本文的工作主打一个贴近用户使用场景,用户用什么软件,看什么网页,本文的模型就用什…

Sapiens——人类视觉大模型的基础

引言 大规模预训练以及随后针对特定任务的语言建模微调取得了显著成功,已将这种方法确立为标准做法。同样, 计算机视觉方法正逐步采用大规模数据进行预训练。LAION5B、Instagram-3.5B、JFT-300M、LVD142M、Visual Genome 和 YFCC100M 等大型数据集的出现…

Python 实现Excel XLS和XLSX格式相互转换

在日常工作中,我们经常需要处理和转换不同格式的Excel文件,以适应不同的需求和软件兼容性。Excel文件的两种常见格式是XLS(Excel 97-2003)和XLSX(Excel 2007及以上版本)。本文将详细介绍如何使用Python在XL…

【SQLite数据库常规使用命令】

之前在做围绕数据库相关的一些小工具的时候,想找一款数据库作为小工具的资料库。需求是:不用复杂的安装,支持简单SQL,空间占用小,操作简单等等。 结合着之前接触到的一些研发同事做的产品的使用经验,我想到…

递归7小题

[ 注意:前6道题均是使用递归完成的,需要数组、指针、链表相关知识,第7道题是求水仙花数的加强版,也是使用递归完成的,3位数的水仙花数我们很熟悉,那5位数的呢?7位数的呢?9位数的呢&a…

【pycharm】如何两个窗口打开同一代码

文章目录 前言解决方案结果 前言 在 编辑长代码,要看上下离得较远的变量 时遇到的问题 解决方案 “window” → “Editor Tabs” → “Split right" 结果

CleanClip vs 传统剪贴板:究竟谁更胜一筹?

在日常工作和生活中,复制粘贴可以说是我们使用最频繁的操作之一。传统的剪贴板功能虽然简单易用,但在功能性和效率上还有很大的提升空间。今天,我们就来比较一下新兴的剪贴板增强工具CleanClip与传统剪贴板,看看到底谁更胜一筹。 1. 剪贴历史管理 传统剪贴板只能存储最后一次…

动态线程池实战(一)

动态线程池 对项目的认知 为什么需要动态线程池 DynamicTp简介 接入步骤 功能介绍 模块划分 代码结构介绍

设计模式学习[6]---代理模式

文章目录 前言1.原理阐述2.举例2.1 例子与类图2.2 代码 总结 前言 代理这个词,从小到大听过不少。比如什么代理服务器,代理商,代理人之类的。通俗来说,代理无非无非就是我代表你处理事务的意思。 那么在设计模式中,针…

Android WebView H5 Hybrid 混和开发

对于故乡,我忽然有了新的理解:人的故乡,并不止于一块特定的土地,而是一种辽阔无比的心情,不受空间和时间的限制;这心情一经唤起,就是你已经回到了故乡。——《记忆与印象》 前言 移动互联网发展…