首页 > 其他分享 >【LeetCode最详尽解答】11-盛最多水的容器 Container-With-Most-Water

【LeetCode最详尽解答】11-盛最多水的容器 Container-With-Most-Water

时间:2024-06-16 11:31:25浏览次数:26  
标签:11 right Container res 高度 height Water left 指针

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家!

链接:

直觉

这个问题可以通过可视化图表来理解和解决。

通过图形化这个问题,可以简化解决过程。我们可以使用双指针技术来解决它。起初,左指针设置在数组的起点,右指针设置在数组的终点。目标是找到最大的可能面积,这个面积受指针指向的较短高度的限制。面积可以通过公式 min(height[left], height[right]) * (right - left) 计算。容器的高度受较短的两个高度之一限制。

为了最大化面积,我们应该移动指向较短高度的指针。这是因为移动指向较高高度的指针不会有助于找到更大的面积,因为容器的高度仍然会受较短高度的限制。具体来说,新高度将是 min(height[left], height[new_right]),它将小于或等于之前的较短高度,并且间隔距离也会缩小。因此,如果左指针指向较短高度,我们将其向右移动。相反,如果右指针指向较短高度,我们将其向左移动。

方法

  1. 初始化两个指针:左指针在数组起点,右指针在数组终点。
  2. 初始化一个变量 res 来存储最大面积。
  3. 使用公式 res = max(res, min(height[left], height[right]) * (right - left)) 来计算面积并更新 res
  4. 移动指向较短高度的指针以尝试找到更大的面积。
  5. 设置提前停止条件:设 h 为数组中的最大高度。如果 (right - left) * h 小于 res,则意味着不可能找到更大的面积,因此我们可以跳出循环。

复杂度

  • 时间复杂度:
    O ( n ) O(n) O(n)
    • 我们只用两个指针遍历数组一次,时间复杂度为线性。
  • 空间复杂度:
    O ( 1 ) O(1) O(1)
    • 无论输入大小如何,我们只使用了常量空间。

代码

class Solution(object):
    def maxArea(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        l = 0
        r = len(height) -1
        h = max(height)
        res = 0
        while l < r:
            if (r-l) * h <= res:
                break
            res = max(res, min(height[l],height[r]) * (r-l))
            if height[l] <= height[r]:
                l+=1
            elif height[l] > height[r]:
                r-=1
        return res  

标签:11,right,Container,res,高度,height,Water,left,指针
From: https://blog.csdn.net/weixin_53765658/article/details/139717396

相关文章

  • Dynamsoft.DotNet.BarcodeReader.Bundle-10.2.1100
    DynamsoftBarcodeReaderSDK.NetEditionDynamsoftBarcodeReaderSDKenablesyoutoefficientlyembedbarcodereadingfunctionalityinyourweb,desktopormobileapplicationusingjustafewlinesofcode.Savingyoumonthsofaddeddevelopmenttime......
  • 5.11安卓开发日记32
    今天上数据库原理,实验二是给出数据后对数据进行多方面的查询。4、在数据库test1中进行下列查询操作,将查询语句与结果写入实验报告。(1)查询所有供应商情况,先按城市升序排列,城市相同按供应商名称降序排列。select*fromsorderbycityasc,snamedesc;(2)查询所有零件情况,先按......
  • 泰山派学习11--字符设备驱动
    1、字符设备定义应用程序按字节/字符来读写数据的设备,不支持随机存取数据,系统直接从设备读取/写入每一个字符。2、字符设备抽象Linux内核中将字符设备抽象成一个具体的数据结构(structcdev),理解为字符设备对象。字符设备的打开、读写、关闭等操作接口(file_operation......
  • c++11新特性之关键字(关于auto、nullptr)
    1.auto用途:用于编译器自动推断出变量类型,这里列举几种比较典型的情况:(1)自动类型推导autox=10;//x的类型是intautoy=3.14;//y的类型是doubleautoz='c';//z的类型是char(2)与迭代器一起使用:当处理STL容器时,auto可以帮助我们自动推导迭代......
  • WebGoC题解(4) 115.第5题 同心圆(比赛模拟题)
    题目描述学校准备在颁奖会把这次比赛的前10名的成绩用崭新的形状表示出来,这个艰巨的任务交给了小C。为了和以往不同,小C决定用每个学生的成绩作为半径画同心圆来表示。这个创新的举动需要你使用GoC编程,在一个黑色实心圆背景下,用10个红色圆表示成绩。具体形状参见输入输出样例......
  • 11.NiO多线程优化
    场景单线程配合一个selector选择器管理多个channel上的事件。问题1.多核cpu,如果是单线程就会让cpu的力量被浪费。2.单线程处理多个事件,如果某个事件耗费时间比较久,就会影响其它事件的处理。例如:redis单线程写的,底层网络用的类似于nio和selector方式编写,所以缺点就是某个......
  • 读取超7100MB/s最高仅51度的长江存储PC411 SSD!雷神MIX PRO迷你机评测
    一、前言:搭载长江存储SSD和酷睿Ultra5125H处理器的雷神迷你机英特尔酷睿Ultra系列移动处理器发布半年之后,搭载它的各路迷你主机陆续出现在消费者面前。最近,雷神带来了全新的MIXPro迷你机,它就搭载了酷睿Ultra5125H处理器,还有广受好评的长江存储PC411SSD。先说SSD!现在我......
  • 【C++】C++11新特性
    C++11是C++程序设计语言标准的一个新的版本,在2011年由ISO批准并发布。C++11新标准从而代替了原来的C++98和C++03.。C++11标准是对C++的一次巨大的改进和扩充。在核心语法,STL标准模板等方面增加众多新功能。例如新增auto,deltype,nullptr等关键字,增加范围for......
  • ASP.NET Core应用程序11:使用模型绑定
      模型绑定是使用从HTTP请求获得的数据值,创建操作方法和页面处理程序所需的对象的过程。本章描述模型绑定系统的工作方式;显示它如何绑定简单类型、复杂类型和集合;并演示如何控制流程,以指定请求的哪一部分提供应用程序所需的数据值。  本章介绍了模型绑定特性,展示了如何使......
  • CC2500和CC1101移植说明
    主要通过如何移植、移植注意、关于芯片配置、如何生成导出配置四大步骤来说明CC2500和CC1101移植首先通过下图1这个宏进行选择 &如何移植要移植的部分在CC2500_hal.c和CC2500_hal.h中, 搜索"//移植"就可以定位到库所需的依赖,需要根据您的环境实现这些函数&移植......