Leetcode 11. 盛最多水的容器

Leetcode 11. 盛最多水的容器

Leetcode 11. 盛最多水的容器

一、题目描述

给定一个长度为 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

二、我的想法

看了 灵茶山艾府 的视频讲解后写的。

还是使用的双指针。主要还是利用了短板理论:短板决定了盛水量,每次都移动短板,如果长度一样的话移哪个都行。

  1. 定义双指针,left 指向最左边元素,right 指向最右边的元素。初始化最大存水量为0。
  2. 当 left 和 right 没相遇时,进行循环。求出对应的存水量,与最大存水量比较并更新。如果左边的板子小于右边的板子,就将左边的板子右移;否则将右边的板子左移。
  3. 最后循环结束得到的最大存水量即为所求。
python 复制代码
class Solution:
    def maxArea(self, height: List[int]) -> int:
        heightLen = len(height)
        left = 0
        right = heightLen - 1
        ans = 0
        while left < right:
            area = (right - left) * min(height[left], height[right])
            ans = max(ans, area)
            if height[left] < height[right]:
                left += 1
            else: 
                right -= 1
        return ans
相关推荐
2501_941805312 分钟前
智慧零售平台中的多语言语法引擎与实时推荐系统实践
leetcode
mit6.8245 小时前
bfs|栈
算法
CoderYanger7 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
jllllyuz7 小时前
Matlab实现基于Matrix Pencil算法实现声源信号角度和时间估计
开发语言·算法·matlab
夏鹏今天学习了吗7 小时前
【LeetCode热题100(72/100)】前 K 个高频元素
leetcode
稚辉君.MCA_P8_Java7 小时前
DeepSeek 插入排序
linux·后端·算法·架构·排序算法
多多*7 小时前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven
.YM.Z8 小时前
【数据结构】:排序(一)
数据结构·算法·排序算法
Chat_zhanggong3458 小时前
K4A8G165WC-BITD产品推荐
人工智能·嵌入式硬件·算法
百***48078 小时前
【Golang】slice切片
开发语言·算法·golang