Leetcode11. 盛最多水的容器
创始人
2024-05-26 14:03:35
0

一、题目描述:

给定一个长度为 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 res:res = min(height[left], height[right])*(right-left)left += 1while left res:res = min(height[left], height[right])*(right-left)right -= 1return res
    

相关内容

热门资讯

建信北证50成份指数型发起式证... 建信北证50成份指数型发起式证券投资基金合同全文和招募说明书全文于2025年7月11日在本公司网站(...
悍高集团股份有限公司首次公开发... 保荐人(主承销商):国泰海通证券股份有限公司特别提示悍高集团股份有限公司(以下简称“悍高集团”、“发...
上海沪工焊接集团股份有限公司关... 证券代码:603131 证券简称:上海沪工 公告编号:2025-040债券代码:113593 债券...
大学生创业调查报告 大学生创业...    【大学生创业调查报告】浙江是一块创业的热土,民营经济兴旺发达的省份。浙江高等教育也是走在中国教...
黄河岸边的故事在破土新生 当清晨的第一缕阳光掠过山脊,坐落在黄河岸边的578栋日光温室次第苏醒闪光,宛如大地馈赠的珍珠项链。站...
新兴消费系列研究之三:婴童消费... 人口结构变化催生“新消费”趋势,规模和内容两个维度带来新变化人口结构变迁催生“新消费”。“新消费”趋...
张海峰:"中国双创赤... “中国双创赤峰模式”是赤峰市政府和北京安快创业谷经过八个月的探讨和交流,针对内蒙古及赤峰市的现状完全...
重庆望变电气(集团)股份有限公... 证券代码:603191 证券简称:望变电气 公告编号:2025-034重庆望变电气(集团)股份有限...
东方今报数字报刊平台 东方今报... 在2020年中国国际服务贸易交易会上,河南不仅带来了河南创意的服务贸易发展成果,更是收获了一批重点项...
成都豪能科技股份有限公司关于使... 证券代码:603809 证券简称:豪能股份 公告编号:2025-039转债代码:113690 转债...