当前位置: 首页 > news >正文

Leetcode11. 盛最多水的容器

一、题目描述:

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

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

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

说明:你不能倾斜容器。

  1. 示例 1:

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

  2. 示例 2:

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

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

二、解决思路和代码

  1. 解决思路(双指针法)

    • 分析:假如容水量=宽度(w)×高度(h),要使得容水量最大,需要宽度尽可能大,高度尽可能大。
    • 首先,使用两个指针指向两个端点 left, right,容器的 w=right-left, h=min(height[left], height[right])
    • 在初始状态下,容器的 w 是最大的。因此,通过移动 left 和 right 指针,找到较高的 h,可以使得容水量更大。
      • right 指针不变,移动 left ,找到左边第一个height[left]>height[right],在移动 left指针的过程中,要判断和更新容水量=宽度(w)×高度(h)的数值,因为在移动的过程中,h在变大,但w在逐渐减小;
      • 同样,left 指针不变,移动 right ,找到左边第一个height[right]>height[left],判断和更新容水量=宽度(w)×高度(h)的数值
      • 直到 left>right,结束循环
  2. 代码

    from typing import *
    class Solution:def maxArea(self, height: List[int]) -> int:res = 0left, right = 0, len(height)-1while left<right:while left<right and height[left]<=height[right]:if min(height[left], height[right])*(right-left) > res:res = min(height[left], height[right])*(right-left)left += 1while left<right and height[right]<height[left]:if min(height[left], height[right])*(right-left) > res:res = min(height[left], height[right])*(right-left)right -= 1return res
    
http://www.lryc.cn/news/16898.html

相关文章:

  • Java笔记026-集合/数组、Collection接口、ArrayList、Vector、LinkedList
  • Hive学习——分桶抽样、侧视图与炸裂函数搭配、hive实现WordCount
  • 大数据算法
  • 非暴力沟通读书笔记
  • 代码随想录【Day21】| 530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236. 二叉树的最近公共祖先
  • 注意啦,面试通过后,别忘了教师资格证认定
  • 【LeetCode】No.154. 寻找旋转排序数组中的最小值 II -- Java Version
  • RestTemplate远程调用
  • registerForActivityResult使用
  • 工作中,python真的有用吗?
  • 固态继电器控制电路
  • 数仓、数据湖、湖仓一体、数据网格的探索与研究
  • 设计模式系列 - 备忘录模式
  • 详细介绍React生命周期和diffing算法
  • 面向对象的特点
  • 智慧校园平台源码 智慧教务 智慧电子班牌系统
  • Vue篇.03-组合式API [setup()]
  • QHashIterator-官翻
  • [qiankun]-部署后线上问题
  • 位图数组 布隆过滤器
  • 多线程Thread常用方法和状态
  • Codeforces Round #836 (Div. 2)
  • Python学习之项目实践: 写一个MP3播放器
  • RocketMQTemplate 实现消息发送
  • 教师干货丨这5款微课必备提效神器,我要告诉全世界!
  • timm使用swin-transformer
  • 【java基础】java八大基本数据类型和运算符
  • Mybatis源码学习笔记(四)之Mybatis执行增删改查方法的流程解析
  • 浅谈测试用例设计
  • python 利用装饰器实现类似于flask路由