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

leetcode11-盛水最多的容器

leetcode 11
在这里插入图片描述

思路

问题分析

拆解问题,面积 = 底 * 高

  • 宽度:两个竖直线之间的距离,显然是 right - left
  • 高度:容器的水位受限于较短的那根竖直线的高度,所以高度为 min(height[left], height[right])

本题其实很容易想到暴力解法,通过双重遍历,计算每一对竖直线所能形成的容器的面积,并记录最大面积。但这种方法的时间复杂度是 O(n²),效率较低,并且无法在leetcode中通过

优化解法-双指针法
  • 由于容器的面积受制于最短的那根竖直线,所以优化的关键在于动态调整左右指针的指向,跳过不必要的比较
  • 我们使用双指针的方式,初始化 left 指针在数组的开头,right 指针在数组的末尾,计算当前容器的面积:
    • 如果 height[left] < height[right],则移动 left 指针,目的是尝试找到一个更高的左边竖直线,增加可能的面积。
    • 如果 height[left] >= height[right],则移动 right 指针,尝试找到一个更高的右边竖直线。
  • 每次移动指针时,都会计算并更新最大面积
为什么双指针法有效
  • 双指针法通过始终选择最短的竖直线来决定移动哪一边指针。因为较短的那根竖直线是面积的瓶颈,只有尝试替换较短的线,才能可能增加容器的面积
  • 如果我们不这么做,选择较长的线是没有意义的,因为更短的那条线限制了容器的容量

实现

var maxArea = function (height) {let left = 0, right = height.length - 1;let max = 0;while (left < right) {let min = Math.min(height[left], height[right])const area = (right - left) * min;max = Math.max(max, area)if (min === height[left]) {// 左边值更小left++} else {right--}}return max;
};
http://www.dtcms.com/a/161289.html

相关文章:

  • Druid监控sql导致的内存溢出
  • 蓝桥杯 3. 压缩字符串
  • oracle 数据库查询指定用户下每个表占用空间的大小,倒序显示
  • MATLAB Coder代码生成(工业部署)——MATLAB技巧
  • 2025系统架构师---基于规则的系统架构风格‌
  • 龙虎榜——20250428
  • 1.9多元函数积分学
  • 报表工具:企业数据决策的“智能翻译官“
  • matlab中的Simscape的调用-入门
  • [特殊字符] SpringCloud项目中使用OpenFeign进行微服务远程调用详解(含连接池与日志配置)
  • Lua 第13部分 位和字节
  • 从微服务到AI服务:Nacos 3.0如何重构下一代动态治理体系?
  • MySQL基础篇 | 1-数据库概述与MySQL安装
  • 第11章 安全网络架构和组件(二)
  • Golang|工厂模式
  • 网络安全实战指南:从安全巡检到权限维持的应急响应与木马查杀全(命令查收表)
  • 后缀数组~
  • 区块链vs实体经济:一场金融、医疗、政务与物流的“效率革命”
  • 优化问题中变量分类与作用分析
  • JavaWeb学习打卡-Day5-Spring事务管理、SpringAOP
  • 系统传输慢,多路复用还不行,加多物理链路buff
  • 同时安装多个版本的golang
  • 账户解封无望?3步高效申诉取回亚马逊冻结资金
  • 【计网】计算机网络的类别与性能
  • LM393比较器的比较翻转电压不对
  • 微信小程序-van-uploader的preview-size
  • 品融天猫代运营服务内容详解:专业化体系驱动品牌增长
  • 策略模式:灵活的算法封装与切换
  • 从灰色地带走向阳光监管的漏洞产业
  • [蓝桥杯刷题]---模拟法[2]日期问题