当前位置: 首页 > news >正文

算法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
class Solution:# 双指针做法def maxArea(self, height: List[int]) -> int:max_area=0left = 0right = len(height) -1 while left < right:area = min(height[left],height[right])*(right-left)max_area = max(max_area,area)if height[left]<height[right]:left+=1else:right-=1return max_area

🧠 为什么移动较矮的一边?

我们来思考一个问题:

当前 leftright 构成一个容器。
如果我们移动一个指针,另一个不动,哪边移动后有可能得到更大的面积

假设:height[left] < height[right] → 移动 left
  • 当前高度由 height[left] 决定(短板)
  • 如果我们移动 right 向内:
    • 宽度一定变小(right - left 减小)
    • 高度最多还是 height[left](因为左边没变)
    • 所以面积一定 ≤ 当前面积(甚至更小)
  • 但如果我们移动 left 向内:
    • 宽度变小,但新的 height[left] 可能更高,从而提升整体高度
    • 有可能得到更大的面积

✅ 所以:只有移动较矮的一边,才有可能获得更大的面积

移动较高的那一边,宽度减小,高度不会增加(仍受短板限制),面积只会更小或不变。

 

http://www.dtcms.com/a/313856.html

相关文章:

  • leetcode-sql-3497分析订阅转化
  • 优选算法 力扣 11. 盛最多水的容器 双指针降低时间复杂度 贪心策略 C++题解 每日一题
  • 验证码等待时间技术在酒店自助入住、美容自助与社区场景中的应用必要性研究—仙盟创梦IDE
  • Flask + HTML 项目开发思路
  • 【BUUCTF系列】[极客大挑战 2019]LoveSQL 1
  • 同质无向加权图:理论基础、算法演进与应用前沿
  • MySQL偏门但基础的面试题集锦
  • 理解 JavaScript 中的“ / ”:路径、资源与目录、nginx配置、请求、转义的那些事
  • IM消息数据库调研
  • Lecture 1 Overview and Tokenization 课程笔记
  • Go语言select
  • Redis真的是单线程的吗?
  • 跟着顶刊学写论文-摘要1
  • codeBuddy IDE 使用教程
  • Web 开发 12
  • ZYNQ-按键消抖
  • labview解析S7协议
  • Neo4j 社区版 Mac 安装教程
  • Django集成图片验证码功能:基于django-simple-captcha实现
  • 数据结构----排序
  • EdgeView for macOS:解决图像管理痛点的利器
  • c# 属性操作(2)
  • PyCharm代码规范与代码格式化插件安装与使用:pylint和autopep8
  • javacc学习笔记 01、JavaCC本地安装与测试
  • C++-异常
  • Go语言实战案例:编写一个简易聊天室服务端
  • 从零开始的云计算生活——项目实战
  • 【Pytorch✨】LSTM04 l理解长期记忆和短期记忆
  • 计算机视觉(1)-图像采集设备选型全景表(工业 + 医疗 + 车载)
  • 编程算法:技术创新与业务增长的核心驱动力