【LeetCode热题100】打卡第7天:盛最多水的容器

news2024/11/18 22:45:34

文章目录

  • 盛最多水的容器
    • ⛅前言
    • 🔒题目
    • 🔑题解

盛最多水的容器

⛅前言

大家好,我是知识汲取者,欢迎来到我的LeetCode热题100刷题专栏!

精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。在此专栏中,我们将会涵盖各种类型的算法题目,包括但不限于数组、链表、树、字典树、图、排序、搜索、动态规划等等,并会提供详细的解题思路以及Java代码实现。如果你也想刷题,不断提升自己,就请加入我们吧!QQ群号:827302436。我们共同监督打卡,一起学习,一起进步。

博客主页💖:知识汲取者的博客

LeetCode热题100专栏🚀:LeetCode热题100

Gitee地址📁:知识汲取者 (aghp) - Gitee.com

Github地址📁:Chinafrfq · GitHub

题目来源📢:LeetCode 热题 100 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台

PS:作者水平有限,如有错误或描述不当的地方,恳请及时告诉作者,作者将不胜感激

🔒题目

原题链接:11. 盛最多水的容器 - 力扣(LeetCode)

在这里插入图片描述

🔑题解

  • 解法一:暴力(时间超限)

    第一个想到的还是这个暴力解法(还是太菜了┭┮﹏┭┮),暴力思想很简单,但是过不了,会时间超限。主要思想是通过两个for循环,直接暴力枚举每种容器的组合,然后两两比较得到最大容量,主要实现步骤:

    • Step1:枚举所有板子的组合。所谓的板子就是height数组的元素,我们可以将每个元素看作一定长度的板子,然后每两个板子(也就是height数组的元素)都可以组成一个容器

    • Step2:计算两块板子的最大盛水容量。由于盛水量由两块板子中的较短板决定,所以我们可以得到一个容量的计算公式

      两块板子中较短版的长度 ∗ 两块板子间的距离 两块板子中较短版的长度*两块板子间的距离 两块板子中较短版的长度两块板子间的距离

    /**
     * @author ghp
     * @title 盛最多水的容器
     */
    class Solution {
        public int maxArea(int[] height) {
            int max = Integer.MIN_VALUE; // 记录最大容量
            // 遍历所有元素能够构成的容器
            for (int i = 0; i < height.length; i++) {
                for (int j = i + 1; j < height.length; j++) {
                    // 计算当前两个板子形成容器的最大盛水量
                    int area = Math.min(height[i], height[j]) * (j - i);
                    max = Math.max(max, area);
                }
            }
            return max;
        }
    }
    

    复杂度分析:

    • 时间复杂度: O ( n 2 ) O(n^2) O(n2)
    • 空间复杂度: O ( 1 ) O(1) O(1)

    其中 n n n 为数组中元素的个数

  • 解法二:双指针

    这个太强了,时间复杂度直接变成 O ( n ) O(n) O(n)。这个想法实现起来也超级简单,但是如果是第一次遇到这种题目,感觉比较难想到(个人感觉(●’◡’●) )。通过两个指针分别从前后遍历,每次都淘汰两块板子中的较短板(因为最短板是不可能构成一个最大容器的,这一点很难直观感受到,可能需要证明一下,我看到好多评论也是说“感觉这个解法会漏掉一些情况”,我也有点感觉,但是顺着K神的思路走下去,发现是没有漏的)。

    从解法一,我们已经得到了容器最大盛水量的计算公式 M a t h . m i n ( h e i g h t [ i ] , h e i g h t [ j ] ) ∗ ( j − i ) Math.min(height[i], height[j]) * (j - i) Math.min(height[i],height[j])(ji)

    在这里插入图片描述

    指针每往中间移动一格 ( j − i ) (j-i) (ji)也就是容器的底会减小,此时移动短板所对应的指针,此时容器的容量可能会增大,但是移动较长板,此时容器的容量一定会减少!所以最后我们可以得出结论:要想得到容器的最大容量,必须每次移动较短的板子

    PS:这里只给出了部分我的理解,详情请参考 K神的正确性证明

    class Solution {
        public int maxArea(int[] height) {
            int i = 0;
            int j = height.length - 1;
            int max = Integer.MIN_VALUE;
            while (i < j) {
                // 计算当前两块板子构成容器的最大盛水量
                int area = Math.min(height[i], height[j]) * (j - i);
                // 移动两板之间的较短板
                if (height[i] < height[j]) {
                    i++;
                } else {
                    j--;
                }
                // 获取当前最大容器盛水量(可能是之前的,也可能是当前的)
                max = Math.max(max, area);
            }
            return max;
        }
    }
    

    可以看到这个代码实现起来还是很简单的O(∩_∩)O,也没什么特别坑的地方

    复杂度分析:

    • 时间复杂度: O ( n ) O(n) O(n)
    • 空间复杂度: O ( 1 ) O(1) O(1)

    其中 n n n 为数组中元素的个数

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

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

相关文章

自制Arduino 风格开发板 - HK32F030MF4P6 紧凑开发板

模仿Arduino Nano 做一个HK32F030M 的紧凑开发板&#xff0c;排针间距和Arduino Nano 相同&#xff0c;整体尺寸略小&#xff0c;适合插在面包板上。兼容HK32F030MF4P6 和0301M&#xff0c;板载CH340N 串口和DS1307 时钟模块。开源工程地址&#xff1a;HK32F030MF4P6 紧凑开发板…

Python学习36:文本分析与加密

类型&#xff1a;字符串‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 描述‪‬‪…

测试百科:白盒测试用例的设计

正文 语句覆盖&#xff1a;每条语句至少执行一次。判定覆盖&#xff1a;每个判定的所有可能结果至少出现一次。&#xff08;又称“分支覆盖”&#xff09;条件覆盖&#xff1a;每个条件的所有可能结果至少执行一次。判定/条件覆盖&#xff1a;一个判定中的每个条件的所有可能结…

PyTorch-网络模型的保存和读取

1. 模型的保存 方法一&#xff1a;保存模型的结构模型的参数 陷阱&#xff1a;需要让文件访问到你自己的模型定义方式&#xff0c;可以用import的方式引入先前的模型定义。 model_save.py import torch import torchvisionvgg16 torchvision.models.vgg16(weightsNone) # …

Linux— 网络编程套接字

目录 预备知识 认识端口号 理解源端口号和目的端口号 认识TCP协议 认识UDP协议 网络字节序 socket编程接口 socket 常见API sockaddr结构 sockaddr 结构​编辑 sockaddr_in 结构 in_addr结构 地址转换函数 简单的UDP网络程序 实现一个简单的英译汉的功能 简易的远程…

注解-反射-XML配置原理

java刚开始原本是直接在方法中创建对象执行程序等&#xff0c;部分代码重复率高&#xff0c;后来就发展成方法封装调用&#xff0c;再后来出现的像spring框架等&#xff0c;引入了XML配置&#xff0c;使得程序更加简洁&#xff0c;方便等&#xff0c;其中XML配置也是基于java反…

java 线程安全和多线程

文章目录 前言一、ThreadLocal是什么&#xff1f;二、synchronized 和 ReentrantLock 都是 Java 中提供的可重入锁&#xff0c;二者的主要区别有以下 5 个&#xff1a;三、线程安全的集合类有哪些&#xff1f;四、说一下你对CompletableFuture的理解四、项目中是如何创建线程池…

R语言生物群落(生态)数据统计分析与绘图(从数据整理到分析结果展示)

R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂&#xff0c;涉及众多统计分析方法。以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线&#xff0c;通过多个来自经典…

C++类和对象三

文章目录 类和对象三初始化列表用途与特性 explicit关键字再谈构造函数static成员static的特性 友元友元函数友元函数特性 友元类友元类特性 内部类概念特性 匿名对象拷贝对象时的一些编译器优化 类和对象三 初始化列表 初始化列表&#xff1a;以一个冒号开始&#xff0c;接着…

【源码解析】Spring Bean生命周期源码解析

Spring启动核心 AbstractApplicationContext#refresh&#xff0c;Spring刷新容器的核心方法。最关键的就是 AbstractApplicationContext#invokeBeanFactoryPostProcessors&#xff0c;扫描BeanAbstractApplicationContext#finishBeanFactoryInitialization&#xff0c;生成Be…

【MySql】InnoDB一棵B+树可以存放多少行数据?

文章目录 背景一、怎么得到InnoDB主键索引B树的高度&#xff1f;二、小结三、最后回顾一道面试题总结参考资料 背景 InnoDB一棵B树可以存放多少行数据&#xff1f;这个问题的简单回答是&#xff1a;约2千万。为什么是这么多呢&#xff1f;因为这是可以算出来的&#xff0c;要搞…

[C语言实现]带你手撕带头循环双链表

目录 什么是双链表&#xff1f; 带头结点的优势: 双链表的实现: 什么是循环双链表&#xff1f; 众所周知&#xff0c;顺序表的插入和删除有时候需要大量移动数据&#xff0c;并且每次开辟空间都可能会浪费大量内存和CPU资源&#xff0c;于是我们有了链表&#xff0c;我们之…

【实用篇】SpringCloud01

SpringCloud01 1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

基于复旦微 JFM7K325T 全国产FPGA的高速数据采集、图像处理方案

板卡概述 PCIE-XM711 是一款基于 PCIE 总线架构的高性能数据预处理 FMC载板&#xff0c;板卡采用复旦微的 JFM7K325T FPGA 作为实时处理器&#xff0c;实现 各个接口之间的互联。该板卡可以实现 100%国产化。 板卡具有 1 个 FMC&#xff08;HPC&#xff09;接口&#xff0c;1 路…

这10道测试用例面试题,面试官肯定会问到

前言 软件测试面试中&#xff0c;测试用例是非常容被问到的一个点&#xff0c;今天小编就给大家把最常见的测试用例方面的问题给大家整理出来&#xff0c;希望对大家的面试提供帮助。 1、 什么是测试用例‍ 答&#xff1a;测试用例的设计就是如何覆盖所有软件表现出来的状态…

硬盘有多少图片取决我的网速, Python获取硬盘少女图集

目录 前言开发环境:案例实现的步骤:代码展示尾语 &#x1f49d; 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 图片数据在网络中随处可见, 如果需要一些图片素材 一睹为快把! ! ! 开发环境: 解释器: python 3.8 编辑器: pycharm 2022.3 专业版 内置模块使用 os &g…

CH341的I2C接口编程说明

CH341的I2C接口特性&#xff1a; 1、支持I2C速度20K/100K/400K/750K&#xff1b; 2、默认不支持设备的ACK应答监测&#xff0c;即忽略ACK状态&#xff1b;强制支持需修改软件&#xff1b; 引脚序号功能说明24SCL23SDA Windows系统SPI通讯接口函数 HANDLE WINAPI CH341OpenD…

Piccolo傻瓜式环境配置

首先下载Piccolo的代码 Piccolo下载网址点击Code然后点击Download ZIP。可能有点慢&#xff0c;总共要下139M。 下载CMAKE CMAKE下载网址下载完后安装CMAKE 构建环境 将下来的Piccolo-main压缩包解压为Piccolo-main文件夹。打开CMAKE&#xff0c;如下图进行目录选择&…