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
相关推荐
DuHz15 分钟前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
Polaris北极星少女36 分钟前
TRSV优化2
算法
代码游侠1 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法
2301_763472462 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
abluckyboy2 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
园小异2 小时前
2026年技术面试完全指南:从算法到系统设计的实战突破
算法·面试·职场和发展
m0_706653232 小时前
分布式系统安全通信
开发语言·c++·算法
天天爱吃肉82183 小时前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
alphaTao4 小时前
LeetCode 每日一题 2026/2/2-2026/2/8
算法·leetcode
甄心爱学习4 小时前
【leetcode】判断平衡二叉树
python·算法·leetcode