LeetCode011之盛最多水的容器(相关话题:双指针,逻辑分析)

news2024/12/22 18:56:36

题目描述

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

示例 1:

输入:[1,8,6,2,5,4,8,3,7]
输出:49 
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

示例 2:

输入:height = [1,1]
输出:1

提示:

  • n == height.length
  • 2 <= n <= 105
  • 0 <= height[i] <= 104

 解题思路

设两指针 i , j ,指向的水槽板高度分别为 h[i], h[j],此状态下水槽面积为 S(i,j) 。由于可容纳水的高度由两板中的 短板 决定,因此可得如下 面积公式 :

S(i,j)=min(h[i],h[j])×(j−i) 


在每个状态下,无论长板或短板向中间收窄一格,都会导致水槽 底边宽度 −1变短:

若向内 移动短板指针i,水槽的短板 min(h[i],h[j]) 可能变大,因此下个水槽的面积可能增大 。
若向内 移动长板指针j,水槽的短板 min(h[i],h[j])不变或变小,因此下个水槽的面积 一定变小 。
因此,初始化双指针分列水槽左右两端,循环每轮将短板向内移动一格,并更新面积最大值,直到两指针相遇时跳出;即可获得最大面积。

算法流程

  1. 初始化: 双指针 i , j 分列水槽左右两端;
  2. 循环收窄: 直至双指针相遇时跳出;更新面积最大值 res ;选定两板高度中的短板,向中间收窄一格;
  3. 返回值: 返回面积最大值 res 即可;

代码实现

class Solution {
    public int maxArea(int[] height) {
        int i = 0, j = height.length - 1, res = 0;
        while(i < j) {
            res = height[i] < height[j] ? 
                Math.max(res, (j - i) * height[i++]): 
                Math.max(res, (j - i) * height[j--]); 
        }
        return res;
    }
}

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

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

相关文章

小程序 --- 收货地址 --- 定位功能

一、整体功能如下图二、功能点定位选择自己的位置手动选择省市县后输入详细地址关键词搜索地址&#xff0c;然后进行选择三、如何实现定位采用小程序API wx.chooseLocation 调出地图选择位置 API wx.chooseLocation 详细说明根据地址解析出省市县以及详细地址及经纬度代码实现c…

【Linux】-- 进程概念

目录 一、进程概念 二、PCB 1.什么是PCB 2.什么是task_struct 3.task_struct包含内容 三、task_struct内容详解 1.查看进程 &#xff08;1&#xff09;通过系统目录查看 &#xff08;2&#xff09;通过ps命令查看 &#xff08;3&#xff09;通过top命令查看 &…

Mysql自定义变量在递归遍历中的妙用

借着在解决一个递归查询父目录的问题&#xff0c;学习了一下mysql变量的用法&#xff0c;在某些场景下这种解法还是比较有特效的&#xff0c;下面具体来聊一下场景&#xff0c;同时也会详细分析下mysql自定义变量的用法 场景&#xff1a; 获取从树的根节点到叶子节点的全路径&…

图解基于UDS的Flash BootLoader

图解基于UDS的Flash BootLoader一、为什么要搞Bootloader&#xff1f;为什么要基于UDS搞Bootloader二、Bootloader应支持的UDS服务三、Bootloader——三段式(1) 预编程阶段(2) 主编程阶段(3)后编程状态四、BootLoader的启动顺序与转换流程五、问题点疑问点 Q:图中的烧写顺序是…

点云 3D 目标检测 - RangeDet(ICCV 2021)

点云 3D 目标检测 - RangeDet&#xff08;ICCV 2021&#xff09;摘要1. 引言2. 相关工作3. 距离视图表示的回顾4. 方法4.1 距离条件金字塔4.2 元核卷积4.3 加权非最大抑制4.4 距离视图中的数据增强4.5 体系结构5. 实验5.1 元核卷积的研究5.2 距离条件金字塔的研究5.3 加权非最大…

基于android的有声听书系统

需求信息&#xff1a; 1&#xff1a;注册登录&#xff1a;未注册用户首先进行账号注册&#xff0c;注册成功后进行登录&#xff0c;已注册用户直接输入账号密码进行登录&#xff0c;登录成功后进入主页面。 2&#xff1a;主页面&#xff1a;通过左右滑动可以实现对推荐界面、订…

Activity7工作流介绍_和BPM语言介绍---工作流工作笔记003

只说经典,重要的部分,节省学习时间,用最快的速度学习掌握 看一个简单审批流程,要知道工作流是基于状态驱动的,就是比如,状态有: 0 已创建 1 已提交 2 已部门经理审核 3 已总经理审核 4 审核通过 5 审核拒绝 根据这些状态来做驱动. 这里需要用到流程引擎,常见的比如有Drools规…

不看后悔,一文入门Go云原生微服务

文章目录打好基础微服务框架对比简单横评各个框架微服务概念软件架构演进史简单理解微服务的好处go-micro概述构成组件Go MicroAPISidecarWebCLIBot总结Go Micro组件架构Registry注册中心Selector负载均衡Broker事件驱动&#xff1a;发布订阅Transport消息传输总结快速入门准备…

使用Java8优化模板方法模式

目录 前言 以前的模板方法 Java 8 的函数式编程 Java 8以后的模板方法 总结 前言 我们在日常开发中&#xff0c;经常会遇到类似的场景&#xff1a;当要做一件事儿的时候&#xff0c;这件事儿的步骤是固定好的&#xff0c;但是每一个步骤的具体实现方式是不一定的。 通…

网络 随笔 2-linux的三种网络模式

0. 前面的科普对操作系统网络的理解还有帮助的 简单点&#xff0c;linux三种网络模式 linux中的三种网络模式 1. bridge 物理网卡使用虚拟网桥作为虚拟交换机的输入物理机以及虚拟网卡接入这个虚拟交换机虚拟网卡与物理网卡处于一个网段下(网关与DNS 一致) 2. NAT 虚拟的N…

删除的文件怎么恢复?误删文件恢复,就使用这些方法!

电脑里面保存着很多文件&#xff0c;为了让电脑更整洁&#xff0c;我们一般都会定期清理不必要的数据。在清理过程中&#xff0c;出现文件被误删&#xff0c;我们该怎么办&#xff1f;误删文件恢复&#xff0c;方法就看下面三个&#xff1a;注册表恢复、回收站恢复、软件恢复。…

一场晚会直播背后的安全攻防

多姿多彩的数字世界中&#xff0c;“直播”扮演了不可或缺的角色。刚刚结束的央视春晚&#xff0c;腾讯和中央广播电视总台一起打造了“竖屏春晚HDR及菁彩声”技术方案&#xff0c;并在“央视频”客户端上线。让广大用户“听”得更沉浸&#xff0c;“看”得更清晰。总台首次使用…

无刷电机驱动器

0.0参考&#xff1a; FOC?看这篇文章就够了 志辉君——【自制FOC驱动器】深入浅出讲解FOC算法与SVPWM技术 SPWM基本原理详解&#xff08;图文并茂公式推导C程序实现&#xff09; 1、开源的FOC方案 1、SmipleFOC是比较常见的无刷驱动方案&#xff0c;因为其便宜的制造成本…

高级Spring之Scope 详解

在当前版本的 Spring 和 Spring Boot 程序中&#xff0c;支持五种 Scope singleton&#xff0c;容器启动时创建&#xff08;未设置延迟&#xff09;&#xff0c;容器关闭时销毁 prototype&#xff0c;每次使用时创建&#xff0c;不会自动销毁&#xff0c;需要调用 DefaultList…

使用Plotly和Python进行交互式数据可视化

使用Plotly和Python进行交互式数据可视化 Python是数据探索和数据分析的好帮手&#xff0c;这都要归功于numpy、pandas、matplotlib等神奇库的支持。在我们的数据探索和数据分析阶段&#xff0c;理解我们正在处理的数据是非常重要的&#xff0c;为此&#xff0c;数据的可视化表…

Swin-Transformer算法解析

本文参考&#xff1a; SwinTransformer&#xff1a;使用shifted window的层级Transformer(ICCV2021)_tzc_fly的博客-CSDN博客 https://zhuanlan.zhihu.com/p/430047908 目录 1 为什么在视觉中使用Transformer 2 Swin-Transformer算法总体架构 3 Swin-Transformer Block详述…

C# 源码 等值线(等高线)云图绘制 ,图上含等高线数值

C# 源码 数据格式为XYZ数据&#xff0c;XY为坐标&#xff0c;Z为对应的值 X Y Z -0.671053 -0.850000 83.330742 -0.671053 -0.850000 85.469604 -0.671053 -0.760526 89.225899 -0.671053 -0.760526 86.994576 -0.671053 -0.760526 86.994576 -0.671053 -0.760526 89.225899 -…

【解读】《云事件响应框架》:云服务用户响应和管理事件首选指南

微信搜索”国际云安全联盟“&#xff0c;回复关键词“云事件”下载本报告 当今互联时代&#xff0c;全面的事件响应策略对于需要管理与降低风险的组织必不可少。然而&#xff0c;在基于云的基础设施和系统的事件响应策略方面&#xff0c;部分由于云的责任共担特性&#xff0c;…

sql的四种连接——左外连接、右外连接、内连接、全连接

一、内连接 满足条件的记录才会出现在结果集中。 二、 左外连接&#xff08;left outer join&#xff0c;outer可省略&#xff09; 左表全部出现在结果集中&#xff0c;若右表无对应记录&#xff0c;则相应字段为NULL 举例说明&#xff1a; 客户表&#xff1a; 订单表&#x…

2023年2月系统集成项目管理工程师认证【报名入口】

系统集成项目管理工程师是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目之一&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职…