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
相关推荐
x_xbx5 分钟前
LeetCode:83. 删除排序链表中的重复元素
算法·leetcode·链表
_小草鱼_25 分钟前
【搜索与图论】DFS算法(深度优先搜索)
算法·深度优先·图论·回溯·递归
I_LPL1 小时前
hot100 栈专题
算法·
2401_879503411 小时前
C++中的观察者模式变体
开发语言·c++·算法
阿贵---1 小时前
C++中的备忘录模式
开发语言·c++·算法
setmoon2142 小时前
C++中的观察者模式实战
开发语言·c++·算法
2403_835568472 小时前
C++代码规范化工具
开发语言·c++·算法
tankeven2 小时前
HJ138 在树上游玩
c++·算法
lihihi2 小时前
P1209 [USACO1.3] 修理牛棚 Barn Repair
算法
weixin_387534223 小时前
Ownership - Rust Hardcore Head to Toe
开发语言·后端·算法·rust