leetcode 热题100(11. 盛最多水的容器)

一、题目

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, heighti) 。

找出其中的两条线,使得它们与 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

二、分析

其实就是求取最大面积,这道题我打算用双指针往中间走试试

三、解题

python 复制代码
class Solution:
    def maxArea(self, height: list[int]) -> int:
        li = []
        j = len(height) - 1
        i = 0
        while j >= 1:
            if height[i] < height[j]:
                area = height[i] * (j-i)
                li.append(area)
                i += 1
            else:
                area = height[j] * (j-i)
                li.append(area)
                j -= 1
        return max(li)

四、代码优化

1、while条件

实际上我上述代码的条件是有问题的,两边往中间走的话,这两个指针一定会在中间集合,所以实际上i永远小于j,等 i >= j 的时候,两个指针就朝相反方向走了,所以while的条件一定是i < j

2、只关心最大值,没必要用 list 存所有面积

我的if else其实是在判断左边小还是右边小,所以其实可以这么写:

python 复制代码
area = min(height[left], height[right]) * (right - left)
max_area = max(max_area, area)

这两句还可以合成一句:

python 复制代码
max_area = max(max_area, min(height[left], height[right]) * (right - left))

就是可读性略低

3、最终优化代码

python 复制代码
class Solution:
    def maxArea(self, height: list[int]) -> int:
        left, right = 0, len(height) - 1
        max_area = 0
        while left < right:
            max_area = max(max_area, min(height[left], height[right]) * (right - left))
            if height[left] < height[right]:
                left += 1
            else:
                right -= 1
        return max_area
相关推荐
砚底藏山河1 小时前
量化实战:回测数据底座快照与版本管理进阶
java·大数据·python·金融·maven
“AI国潮设计-小江”1 小时前
《Python+SDXL实战:用ControlNet批量生成“英歌舞麻将糕”IP,附自动化脚本与商用思路》
开发语言·人工智能·python·prompt·aigc
w_zero_one2 小时前
链表(4)
java·数据结构·算法
吠品2 小时前
GitHub 周榜拆解:决策小模型扎堆上位
c语言·开发语言·算法
Ivanqhz2 小时前
MLA、DSA、CSA、HCA
人工智能·算法·机器学习
逗脑IDE3 小时前
零基础学ESP32:RFID无线射频卡——让ESP32拥有“刷卡“能力!
开发语言·网络·人工智能·python·esp32·硬件开发
嘎嘎风3 小时前
MiniMind 学习笔记之 07 模型怎么学会猜词(旋钮是怎么被拧动的)
算法·源码阅读
协皓家具3 小时前
2026年广州岛台吧台椅厂家有啥新变化
大数据·运维·python·devops
yuniko-n3 小时前
【Java】字符串相关坑点
java·开发语言·python