力扣hot100——第3天:11盛最多水的容器、15三数之和、17电话号码的字母组合

news2024/12/26 0:42:30

文章目录

  • 1.11盛最多水的容器
    • 1.1.题目
    • 1.2.解答
      • 1.2.1.题解
      • 1.2.2.自己对参考题解的进一步解释
  • 2.15三数之和【代码随想录已刷】
  • 3.17电话号码的字母组合【代码随想录已刷】

1.11盛最多水的容器

参考:力扣题目链接;题解

1.1.题目

在这里插入图片描述

1.2.解答

1.2.1.题解

这道题目可以使用双指针来求解,其中参考题解的解释已经非常详细了,直接摘录如下:

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

1.2.2.自己对参考题解的进一步解释

假设这个容器如下图所示:
在这里插入图片描述

那么按照参考题解的做法,一开始左右边界是包含整个数组的。这里假设数组长度是n,然后数组中不包含的长度是i。那么我们想做的就是i从0开始遍历到n,数组的长度n-i也就是从n减小到0,然后我们寻找最大的面积。

1.i = 0,数组长度n-i = n
此时就是整个数组的长度,我们可以直接计算面积S_0 = min(num[0], num[4]) * (4 - 0)

2.i=1,数组长度n-i = n-1

此时我们必须要移动数组的边界了。按照参考题解的讲解,如果此时我们保持左边界left = 0不动,去移动右边界的话,那么不管右边界移动到什么位置,也就是不管数组长度是n/n-1/n-2/....,结果肯定都是小于S_0的。也就是说只要是以left = 0作为左边界,那么不管数组长度是多少,结果都小于之前我们已经做过的计算S_0

因此当我们从当前的位置缩减数组长度的时候,一定不能把left=0仍然作为左边界了,所以只能把左边界右移,然后得到面积S_1 = min(num[1], num[4]) * (4-1)

3.i=2,数组长度n-i = n-2

此时我们又要移动数组的边界。按照参考题解的讲解,如果此时我们保持左边界left = 1不动,去移动右边界的话,那么不管右边界移动到什么位置,也就是不管数组长度是n-1/n-2/n-3/...,结果肯定都是小于S_1的。也就是说只要是以left = 1作为左边界,那么不管数组长度是多少,结果都小于之前我们已经做过的计算S_1

因此当我们从当前的位置缩减数组长度的时候,一定不能把left=1仍然作为左边界了,所以只能把左边界右移,然后得到面积S_2 = min(num[2], num[4]) * (4-2)

疑问:但是这个时候自己的疑问就是,在数组长度是n-2的时候,如下图所示,我们可以选择左右边界为0-21-32-4,此时选择了2-4,并没有比较它和0-21-3两个数组的面积谁更大,怎么就能确定他是长度为n-2的所有数组中面积最大的呢?

在这里插入图片描述

解答:实际上,确实无法判断2-4就是长度为n-2的数组中面积最大的。但是我们并不是要计算每个长度的数组中面积最大的,而是一直在判断所有长度的数组中面积最大的

  • 比如左右边界为0-2:此时是0为左边界,但是前面第2步移动窗口的时候我们已经证明,只要是以0为左边界,不管数组长度是多少,结果都小于我们已经计算的S_0。而S_0已经被用于统计是否是所有长度的数组中面积最大的了。所以在最终最大面积的结果中,一定可以保证S(0-2) <= S_0 = S(0-4) <= max_result。所以尽管我们不能确定0-2的面积和2-4的面积谁大谁小,但是我们可以确定最终的最大面积中,一定不包括0-2这个结果。所以在选择长度为n-2的数组时,不考虑0-2这个数组对最后我们求解最大面积没有影响。

  • 再比如左右边界为1-3:此时是1为左边界。但是前面第3步移动窗口的时候我们已经证明,只要是以1为左边界,不管数组长度是多少,结果都小于我们已经计算的S_1。而S_1已经被用于统计是否是所有长度的数组中面积最大的了。所以在最终最大面积的结果中,一定可以保证S(1-3) <= S_1 = S(1-4) <= max_result。所以尽管我们不能确定1-3的面积和2-4的面积谁大谁小,但是我们可以确定最终的最大面积中,一定不包含1-3这个结果。所以在选择长度为n-2的数组时,不考虑1-3这个数组对最后我们求解最大面积没有影响。

经过上面的解释可以发现,之前移动数组的时候,移动了那个边界,就把以它为边界的所有其他数组的可能性都包括了,所以最后只需要移动左右边界就可以求得最优的解。

最后给出代码如下,使用双指针代码其实很简单,关键在于理解为什么使用双指针可以得到最优解。

int maxArea(vector<int> &height)
{
    int left = 0;
    int right = height.size() - 1;
    int result = 0;

    while(left < right)
    {
        // 计算此次的面积
        int s = min(height[left], height[right]) * (right - left);
        // 和最大面积比较,更新最大面积
        result = max(s, result);
        // 移动短板
        if(height[left] <= height[right])
            left++;
        else
            right--;
    }

    return result;
}

2.15三数之和【代码随想录已刷】

参考:力扣题目链接;自己的博客解答

3.17电话号码的字母组合【代码随想录已刷】

参考:力扣题目链接;自己的博客解答

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

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

相关文章

Mybatis-多表联查

多表联查一、步骤一:创建pojo实体类二、步骤二&#xff1a;明确两个实体类之间的关系三、步骤三:修改pojo实体类四、步骤四&#xff1a;编写Mapper接口五、步骤五&#xff1a;编写Mapper映射文件题目1&#xff1a;通过订单id查询订单详情以及所属用户题目2&#xff1a;通过用户…

OpenCV入门(C++/Python)- 使用OpenCV读取、显示和写入图像(一)

使用OpenCV读取、显示和写入图像1.imread()读取图像imread()函数2.imshow()在窗口中显示图像waitKey()destoryAllWindows()3.imwrite()将图像写入文件目录读取、显示和写入图像是图像处理和计算机视觉的基础。即使裁剪、调整大小、旋转或应用不同的过滤器来处理图像&#xff0c…

C. Carrying Conundrum(思维 + 奇偶数位)

Problem - 1567C - Codeforces 爱丽丝刚刚学会了加法。但是&#xff0c;她还没有完全学会 "携带 "的概念--她不是携带到下一列&#xff0c;而是携带到左边两列的列。 例如&#xff0c;评估20392976这个和的常规方法是如图所示。 然而&#xff0c;爱丽丝是按照图中的…

【在SpringBoot项目中使用Validation框架检查数据格式-常用的检查注解】

常用的检查注解 使用Validation框架检查数据格式时&#xff0c;常用的检查注解有&#xff1a; NotNull&#xff1a;不允许为null值 可用于任何类型的参数NotEmpty&#xff1a;不允许为空字符串&#xff0c;即长度为0的字符串 仅用于检查字符串类型的参数NotBlank&#xff1a;不…

【D3.js】1.17-给 D3 元素添加标签

title: 【D3.js】1.17-给 D3 元素添加标签 date: 2022-12-02 14:35 tags: [JavaScript,CSS,HTML,D3.js,SVG] 为了让图更易懂&#xff0c;我们给每一个rect添加上标签。 一、学习目标 如何添加text元素&#xff1f; .append(“text”) 如何设置text元素的值&#xff1f; .attr(…

[附源码]计算机毕业设计在线图书销售系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

IPWorks macOS Edition通信组件

IPWorks macOS Edition通信组件 用于Internet通信的一整套组件。 IPWorks是一个用于Internet开发的综合框架&#xff0c;它消除了Internet开发的复杂性&#xff0c;提供了可编程的、支持SSL的组件&#xff0c;以便于执行诸如确保安全、发送电子邮件、传输文件、管理网络、浏览W…

物联网 MQTT 协议

MQTT官网&#xff1a;MQTT - The Standard for IoT Messaging MQTT中文网&#xff08;全是广告&#xff09;&#xff1a;首页 | MQTT中文网 物联网百科 物联网&#xff08;Internet of Things&#xff0c;简称IoT&#xff09;是指通过各种信息传感器、射频识别技术、全球定位…

在线编程教学技术解决方案,覆盖所有授课场景需求

在线编程教学是一种应用较为广泛的远程教学形式&#xff0c;例如&#xff1a;互动体验&#xff0c;音视频技术的普及&#xff0c;对线上教学的质量与学习效率带来了很大的提升。在线编程教学可以让教师对学生进行在线编程教学&#xff0c;以一对多小班教学为主。那么在线编程教…

线上项目源码安全性处理方案

场景&#xff1a; 最近项目提出要对线上代码进行安全性处理&#xff0c;防止客户直接通过反编译工具将代码反编译出来 方案&#xff1a; 第一种方案使用的是代码混淆 第二种方案使用的是代码加密 方案比较 方案一&#xff1a;采用的proguard-maven-plugin插件 方案二&#xf…

要花多少亿美元,HPE才能买下超融合鼻祖Nu­t­a­n­ix?

【全球存储观察 | 热点关注】据报道&#xff0c;慧与科技HPE在近几个月与超融合提供商Nutanix就收购进行了谈判。 在这之前的2017年2月&#xff0c;HPE以6.5亿美元收购了超融合全球老二SimpliVity&#xff0c;后来整合成了HPE重要的超融合产品线&#xff0c;并进一步丰富了整体…

Seal库官方示例(五):ckks_basics.cpp解析

这个代码计算的是πx30.4x1\pi \times x^30.4 \times x 1πx30.4x1。 代码解析 方案选择 首先照例是方案选择 EncryptionParameters parms(scheme_type::ckks);参数设置 CKKS方案中使用rescale方法来控制膨胀的密文规模和噪声&#xff0c;这个和modulus switching有点类似…

[激光原理与应用-28]:《激光原理与技术》-14- 激光产生技术 - 激光的主要参数与指标

目录 1、 激光器的门限电流与功率输出 2、激光器的调制增益 3、功率/能量密度 6、额定功耗 7、转换效率 8、光斑大小 9、线宽 10、激光器的谱线宽度。 11、激光器的相对强度噪声RIN。 12、激光器的线性范围。 13、带内平坦度 14、激光器的温度特性 15、激光器的交…

基于PHP+MySQL信息技术学习网站设计与实现

智多在线网络学习平台为学习各种技术查看资料的用户提供一个准确、最新的技术与相关文档&#xff0c;浏览目前流行教学的新闻&#xff0c;提出技术上遇到的难点及问题&#xff0c;帮助其他用户回答所提出的问题&#xff0c;上传想要分享的资源&#xff0c;下载要获取的相关技术…

Spirng MVC——获取参数详解

文章目录1. 什么是 Spirng MVC1.1 MVC 定义1.2 MVC 和 Spring MVC 的关系2. 创建Spring MVC 项目3. Spring MVC 学习目标3.1 实现用户和程序的映射方法1&#xff1a;RequestMapping("/xxx")方法2&#xff1a;使用 POSTMapping("/xxx")方法3&#xff1a;使用…

Kali生成windows木马程序

目录 一、生成windows执行木马程序 二、进入msfconsole进行监听目标上线 三、目标运行木马和后渗透 四、问题 Meterpreter session 2 closed. Reason: Died 一、生成windows执行木马程序 -p windows/x64/meterpreter/reverse_tcp //载入64位payload攻击载荷&#xff0c…

RabbitMQ-惰性队列

文章目录1 消息堆积问题2 惰性队列2.1 基于命令行设置lazy-queue2.2 基于Bean声明LazyQueue(推荐)2.3 基于RabbitListener声明LazyQueue3 总结3.1 消息堆积问题的解决方案&#xff1f;3.2 惰性队列的优点有哪些&#xff1f;3.3 惰性队列的缺点有哪些&#xff1f;1 消息堆积问题…

BSA-maltose 牛血清白蛋白修饰麦芽糖 BSA-麦芽糖

产品名称&#xff1a;牛血清白蛋白修饰麦芽糖 英文名称&#xff1a;BSA-maltose 用途&#xff1a;科研 状态&#xff1a;固体/粉末/溶液 产品规格&#xff1a;1g/5g/10g 保存&#xff1a;冷藏 储藏条件&#xff1a;-20℃ 储存时间&#xff1a;1年 牛血清中的简单蛋白&#xff…

JAVA数据类型与变量

JAVA初阶 背景了解 Java语言之父—>高斯林。现代计算机之父—>冯诺依曼。 Java当中的main方法。 .java ->编译javac xxx.java -> xxx.class[字节码文件&#xff1a;二进制文件]。java命令 运行java程序 public class HelloWorld {//m main psvm 出现之后回车即可…

Qt第二十七章:QWidget、QMainWindow自定义标题栏并自由移动缩放

前提&#xff1a;UI必須采用自适应布局。 自定义组件【直接CV】custom_components.py from PySide6 import QtGui, QtWidgets, QtCore from PySide6.QtCore import Qt, QSize, QRect from PySide6.QtWidgets import QPushButton, QLabel, QWidgetclass QCustomTitleBar:def _…