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
相关推荐
飞川00116 分钟前
【LeetCode 热题100】23:合并 K 个升序链表(详细解析)(Go语言版)
算法·go
飞川00119 分钟前
【LeetCode 热题100】55:跳跃游戏(详细解析)(Go语言版)
算法·go
Tony8825 分钟前
手动实现一个堆
算法
姜行运26 分钟前
数据结构【栈和队列附顺序表应用算法】
android·c语言·数据结构·算法
地平线开发者33 分钟前
智能驾驶中预测模块简介
算法·自动驾驶
小森776734 分钟前
(八)PMSM驱动控制学习---无感控制之滑膜观测器
算法·嵌入式·电机控制·foc·永磁同步电机·滑模控制
雾里看山37 分钟前
算法思想之双指针(二)
算法·推荐算法
地平线开发者38 分钟前
征程 6|工具链 VP 示例中日志打印解读
算法·自动驾驶
飞川0011 小时前
【LeetCode 热题100】146:LRU 缓存(详细解析)(Go语言版)
算法
uhakadotcom1 小时前
Supervised Fine-Tuning(SFT)最佳实践
算法·面试·github