LeetCode 盛最多水的容器 双指针

2023-09-22 10:07:01

原题链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题面:

给定一个长度为 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 <= 10^5
  • 0 <= height[i] <= 10^4

解题思路:

如果使用最朴素的做法,两层for循环分别枚举左端点和右端点,那么一定会超时,考虑使用双指针,达到O(n)的复杂度。

由于容纳的水量是由两个指针指向的数字中较小值∗指针之间的距离决定的。如果我们移动数字较大的那个指针,那么前者「两个指针指向的数字中较小值」不会增加,后者「指针之间的距离」会减小,那么这个乘积会减小。因此,我们移动数字较大的那个指针是不合理的。因此,我们移动 数字较小的那个指针。这是符合直觉的。

代码(CPP):

class Solution {
public:
    int maxArea(vector<int>& height) {
        int n = height.size();
        int ans = 0;
        int l = 0, r = n - 1;
        while (l < r) {
            int area = (min(height[l], height[r])) * (r - l);
            ans = max(ans, area);
            if (height[l] > height[r]) {
                r--;
            } else {
                l++;
            }
        }
        return ans;
    }
};

更多推荐

I/O扩展器IC

一、前言由于单片机资源不足,第一次使用IO扩展器,顺便记录下来使用心得,网上查询资料很少,使用的人不多,基本都得照着手册去手搓,搞底层难啊.需要扩展的IO需求不是很复杂,也不是用来在驱动总线信号,就是扩展为IO,有输入和输出控制即可,之前总用移位寄存器74HC595去扩展IO输出控制,但是需要输入的时候,还是得用专用的

流媒体弱网优化之路(机器学习应用)——了解我们的网络模型

流媒体弱网优化之路(机器学习应用)——了解我们的网络模型——我正在的github给大家开发一个用于做实验的项目——github.com/qw225967/Bifrost目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实现一个json全配置,提供全面的可视化算法观察能力。欢迎大家使用——文

医疗革命的关键推手,看AIGC弥合医疗差距的未来之路

随着科技的飞速进步,医疗水平在过去几十年里取得了巨大的突破。这些科技创新不仅改变了我们对健康和医疗的认知,也深刻地塑造了社会的现状。其中,人工智能作为医疗领域的一项前沿技术,正以前所未有的方式影响着我们的生活。它不仅提高了医疗水平,还为社会带来了全新的挑战和机遇。但医疗差距始终一直存在,不同地区和人群之间医疗服务和资源

9.21(复习9.20,9.17,9.13)

1.转轮法对于点查询和范围查询比较复杂,散列划分适合点查询,范围划分适合点查询和范围划分2.XML数据库适合管理复杂数据结构的数据集,当数据本身具有层次特征时,由于XML数据格式能够清晰表达数据的层次特性。9.201.混合水平是水平分片,垂直分片和导出分片的混合2.关联挖掘是用于发现数据库中数据间的关联习惯3.提取游标

QT配置MySQL数据库 && ninja: build stopped: subcommand failed

QT配置MySQL数据库我当前的软件版本:QTCreator10.0.2(community),MingW6.4.3(QT6),MySQL8.0。MySQL不配置支持的数据库有QList("QSQLITE","QODBC","QPSQL"),这个时候是不支持MYSQL数据库的,所以需要进行配置。通常老版本的QT配置是通

【从0学习Solidity】9. 常数 constant和immutable

【从0学习Solidity】9.常数constant和immutable博主简介:不写代码没饭吃,一名全栈领域的创作者,专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构,分享一些项目实战经验以及前沿技术的见解。关注我们的主页,探索全栈开发,期待与您一起在移动开发的世界中,不断进步和创造!本文收录于不写代码没

vue2的基础知识巩固

一、定义:是一个渐进式的JavaScript框架二、特点:减少了大量的DOM操作编写,可以更专注于逻辑操作分离数据和界面的呈现,降低了代码耦合度(前端端分离)支持组件化开发,更利于中大型项目的代码组织vue2核心功能:响应式数据与差值表达式:先实例化vue,在内部设置el(选择器,这个vm实例对谁生效),data声明响

从入门到出师,关于学习RPA的建议!

随着人工智能技术的不断发展,RPA(RoboticProcessAutomation)作为一种新型的自动化生产工具,正逐渐成为IT领域的热门话题。越来越多的初学者和职场人士开始关注和学习RPA技术,以提升个人技能和职业竞争力。一、了解RPA基础知识学习RPA之前,需要了解其基础知识。包括什么是RPA,RPA的应用场景,

面试题:RocketMQ 如何保证消息不丢失,如何保证消息不被重复消费?

文章目录1、消息整体处理过程Producer发送消息阶段手段一:提供SYNC的发送消息方式,等待broker处理结果。手段二:发送消息如果失败或者超时,则重新发送。手段三:broker提供多master模式,即使某台broker宕机了,保证消息可以投递到另外一台正常的broker上。Broker处理消息阶段手段四:提供

LeetCode19.删除链表的倒数第N个节点

我先用的第一种方法,先第一次遍历算出有节点数num,然后第二次遍历找到第num-n个节点,删除它的下一个节点,也就是第num-n节点.next=num-n节点.next.next(),然后需要注意的是找到第num-n个节点,指针需要从头节点移动num-n-1次,但是后来一直报空指针异常,我反复的检查,一步一步自己推,死

身份和访问管理解决方案:混合型IAM

对于依赖于本地IT基础结构和传统安全模型的组织,可以更轻松地验证和授权企业网络内的所有内容,包括设备、用户、应用程序和服务器。尝试从公司网络外部获取访问权限的用户使用虚拟专用网络(VPN)和网络访问控制(NAC)进行身份验证。随着云和远程工作的日益普及,新的企业架构正在重新定义边界。数据还存储在公司墙外,用户可以通过公

热文推荐