LeetCode算法(和中等打的有来有回)——盛最多水的容器

文章目录

    • leetcode第11题:盛最多水的容器
      • 二次循环
        • 代码
      • 双指针优化
        • 解析
        • 代码

leetcode第11题:盛最多水的容器

在这里插入图片描述

二次循环

这道题比较容易想到的就是通过二次循环遍历所有能盛的水的体积。

代码
class Solution {public int maxArea(int[] height) {// 记录最大体积int max = 0;// 左侧for(int i=0;i<height.length;i++){// 右侧for(int j =i+1;j<height.length;j++){// 计算体积int volumn = (j-i)*Math.min(height[i],height[j]);// 比较体积与当前最大值if(volumn>max)max = volumn;}    }return max;}
}

但是很明显,当前这种方案的时间复杂度为O(n*n),会在提交时超出时间限制。

双指针优化

解析

那么尝试进行优化,寻找这种情形下有没有什么特点可以被发现。

这里可以观察体积计算的公式
v = height*width
(其中width=right-left; height=min(heights[right],heights[left]))的特性。

假设我们通过双指针从height数组左右两侧依次向中间夹,那么width就会一直减小。而此时,我们只有让水桶的木板变高才会让容器的体积增大(一个变量始终减小或者增大,只需要考虑另一个变量就可以)
因此在移动过程中,如果移动较高的那么体积必然减小,只有移动较低的才会可能让体积增大(决定木桶体积的是最短板,而不是最长板)
我们在遍历的过程中不断移动较短的部分,即:

if(height[left]>height[right]){right--;
}else{left++;
}

同时不断计算当前移动后是不是大于记录的最大容量,如果大于那么更新最大容量。

int volumn = Math.min(height[right],height[left])*(right-left);
if(volumn>max)max = volumn;

因此本道题目关键:

1.决定木桶体积的是最短板,而不是最长板
2.两个变量计算的时候,如果控制其中一个始终减小或者增加,那么只需要关注另一个变量就可以
3.如果两个变量增加减小无法控制,那么时间复杂度只能提高。

代码
class Solution {public int maxArea(int[] height) {if(height.length==1)return 0;int left = 0;int right = height.length-1;int max = Math.min(height[left],height[right])*(right-left);// 左右依次遍历// 移动较小的那根while(left<right){if(height[left]>height[right]){right--;}else{left++;}int volumn = Math.min(height[right],height[left])*(right-left);if(volumn>max)max = volumn;}return max;}
}

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

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

相关文章

Karmada 多集群服务发现

一、背景介绍 多集群架构下&#xff0c;不同 Kubernetes 集群间的服务如何互通是核心挑战。Karmada 支持 Kubernetes Multi‑cluster Service APIs&#xff08;MCS&#xff09;&#xff0c;通过 ServiceExport 和 ServiceImport 实现跨集群服务发现与调用&#xff0c;帮助多集…

macOS 26正式发布,全新Liquid Glass设计语言亮相

在全球科技爱好者翘首以盼的WWDC 2025开发者大会上&#xff0c;苹果公司正式揭开了macOS 26系统的神秘面纱。此次系统更新最令人瞩目的&#xff0c;当属其采用的全新Liquid Glass设计语言&#xff0c;该设计不仅重塑了Mac的视觉风格&#xff0c;更为用户带来了一场前所未有的操…

网络基础(3)

网络基础&#xff08;3&#xff09; 有关进程 1&#xff09;进程是人在系统中的代表&#xff0c;只要把数据给进程&#xff0c;人就相当于拿到了数据 2&#xff09;数据传输到主机不是目的&#xff0c;而是手段。到达主机内部&#xff0c;再交给主机内的进程才是目的 上网的…

C语言专题:17.逻辑运算与三目运算符(按位逻辑运算、条件运算符)

​ C语言中的逻辑运算符和三目运算符&#xff08;条件运算符&#xff09;是非常常见且基础的操作符&#xff0c;它们分别用于布尔逻辑运算和简化条件判断的表达式。通过合理使用这些运算符&#xff0c;可以使代码更加简洁、清晰。本文将重点介绍逻辑运算符、三目运算符和按位逻…

【分布式 ID】一文详解美团 Leaf

文章目录 1. 前言2. 项目启动示例 - MYSQL 和 Zookeepr2.1 Leaf-segment 模式2.2 Leaf-snowflake 模式 - 单节点2.3 Leaf-snowflake 模式 - 多节点 3. Leaf-segment 详细讲解4. Leaf-segment 源码解析4.1 SegmentBuffer 号段缓存4.2 Segment 号段4.3 初始化号段服务 SegmentIDG…

互联网大厂Java面试实录:Spring Boot与微服务在电商场景中的应用

互联网大厂Java面试实录&#xff1a;Spring Boot与微服务在电商场景中的应用 面试场景 面试官&#xff1a;你好&#xff0c;谢飞机&#xff0c;欢迎参加我们的Java开发岗位面试。首先&#xff0c;能否简单介绍一下你的技术背景&#xff1f; 谢飞机&#xff1a;嗨&#xff0c…

XILINX Ultrascale+ Kintex系列FPGA的架构

Xilinx&#xff08;现为AMD&#xff09;Kintex UltraScale系列FPGA是基于16nm FinFET工艺的高性能、中等成本的现场可编程门阵列&#xff0c;专为高带宽、低功耗和成本效益的应用设计&#xff0c;广泛用于5G通信、数据中心、视频处理、航空航天等领域。以下详细介绍Kintex Ultr…

腾讯云实名资质 “待补充后提交” 解决方法

目录 一、引言二、为什么会出现 “待补充后提交” 状态三、需要补充的具体材料3.1 营业执照3.2 法人身份证相关3.3 短信管理员资料3.4 合规使用承诺函 四、处理流程详细步骤4.1 登录腾讯云控制台4.2 进入实名资质相关页面4.3 上传补充材料4.4 提交审核 五、注意事项5.1 材料规范…

8分钟讲完 Tomcat架构及工作原理

https://www.bilibili.com/video/BV1J3411k7Xc/?spm_id_from333.337.search-card.all.click&vd_source36145f3620bdf21c0f1a843352e603fb JavaWeb开发必看&#xff01;Tomcat架构及工作原理&#xff08;8分钟&#xff09; 分阐明了Tomcat的工作原理。 一、Tomcat的核心架…

C盘爆满元凶!WinSxS组件解密

C盘爆满元凶!WinSxS组件解密 WinSxS是什么?核心功能与重要性目录为何疯狂膨胀?安全清理权威指南优先使用微软官方工具:DISM工具清理效果与性能影响重要风险提示总结C盘爆满元凶!WinSxS组件解密你是否也遇到过: C盘空间频频告急,检查发现WinSxS文件夹竟独占数十GB空间?想…

毕业设计(启智模块化机器人的组装与K5的使用

记录一下 毕业设计的部分笔记 准备清空文件发到csdn做一个纪念0.0 物联网毕业设计 机器的组装与K5的使用 基础文件的学习 首先安装K5 和文件包中的JLink驱动 并且文件实例里的代码必须加上x后缀否则 只能用K4 来打开 供电&#xff1a;整个系统都需要电池运转 build 存放…

从0开始学习R语言--Day37--CMH检验

对于有多个特征的数据&#xff0c;我们一般的处理方式是构建特征函数&#xff0c;计算每个特征向量的系数&#xff0c;从而将其影响纳入到研究量中&#xff0c;但对于简单的问题&#xff0c;也这样做的话未免有点小题大做。这时我们可以考虑用CMH来分析变量在每个特征下的影响&…

搜索选择DFS还是BFS

1. DFS&#xff08;深度优先搜索&#xff09;&#xff1a;优先进行深度纵向搜索&#xff0c;DFS所需的内存少于BFS所需的内存&#xff0c;利用堆栈实现&#xff0c;适合找最短路径。 2. BFS&#xff08;广度优先搜索&#xff09;&#xff1a;优先进行广度横向搜索&#xff0c;…

三格电子——电力协议转换器

Modbus 转 IE104 网关型号 SG-TCP-IEC104 &#xff0c;是三格电子推出的工业级网关&#xff08;以下简称网 关&#xff09;&#xff0c;主要用于 Modbus RTU/TCP/ASCII 数据采集、 DLT645-1997/2007 数据采集&#xff0c;可接多功 能电力仪表、温控仪、电表等&#xf…

UE5 瞄准偏移(AimOffset)功能详解

什么是AimOffset? AimOffset(瞄准偏移)是一种特殊的动画混合空间(类似于 Blend Space),它通过将多个预设姿势叠加到一个基础动作上,实现角色根据视角方向进行上下左右的动画混合。简单来说,AimOffset 在射击游戏中常用来处理角色持枪瞄准时的动作,比如抬头、低头、左…

在Ubuntu24上安装ollama

安装ollama之前&#xff0c;建议检查显卡驱动是否安装完成。如果还未安装显卡驱动&#xff0c;建议先安装显卡驱动再安装ollama。 安装curl sudo apt update sudo apt -y install curl进入ollama的下载网站 https://ollama.com/download/linux 复制安装脚本&#xff0c;并在…

【Kafka使用方式以及原理】

Kafka生产者发送消息的方式 Kafka生产者发送消息主要通过以下三种方式&#xff1a; 同步发送 生产者发送消息后&#xff0c;会阻塞等待Broker的响应&#xff0c;确认消息是否成功写入。这种方式可靠性高&#xff0c;但吞吐量较低。代码示例&#xff1a; ProducerRecord<S…

【ChatTTS】ChatTTS使用体验

ChatTTS 使用体验&#xff1a;初始使用真的十分惊艳。可以尝试官网调用试一试。部署的好处是&#xff0c;遇到好听的音色可以把参数自动存储在本地。 苦恼&#xff1a;相同参数生成的音色不一致&#xff0c;需要多次调整&#xff0c;但最终效果非常满意。 ⭐ GitHub Star数变化…

华为云Flexus+DeepSeek征文| 基于华为云Dify-LLM高可用平台开发运维故障处理智能体

华为云FlexusDeepSeek征文&#xff5c; 基于华为云Dify-LLM高可用平台开发运维故障处理智能体 1. 概述2. 创建工作流2.1. 创建开始节点2.2. 创建搜索节点2.3. 创建LLM大模型节点2.4. 创建结束节点 3. 测试工作流4. 应用发布5. 总结 1. 概述 Dify是一款开源的LLM应用开发平台&am…

vue中scss下载方式与引入方式

1. scss下载 npm install sass-loader --save-devnpm install node-sass --save-dev 2. 在style标签里面加入lang“scss” 测试下&#xff01;