当前位置: 首页 > 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.xdnf.cn/news/191359.html

相关文章:

  • AG32VF407VG的VREFP是否可以输入2.5V的参考电压
  • React:封装一个评论回复组件
  • 用远程代理模式轻松实现远程服务调用,打开编程新大门
  • KMP算法
  • 英语五大基本句型
  • gradle-tasks.register(‘classesJar‘, Jar)解析
  • OpenCV计算机视觉实战(2)——环境搭建与OpenCV简介
  • 【含文档+PPT+源码】基于微信小程序的社交摄影约拍平台的设计与实现
  • 【学习笔记】机器学习(Machine Learning) | 第六周|过拟合问题
  • 人工智能-深度学习之多层感知器
  • Flutter 学习之旅 之 Flutter 和 Android 原生 实现数据交互的MethodChanel和EventChannel方式的简单整理
  • 优化 Flutter 应用启动:从冷启动到就绪仅需 2 秒
  • SQL知识点合集---第二弹
  • 阿里qiankun微服务搭建
  • (leetcode)力扣100 3.最长连续序列(哈希?排序)
  • 【JS事件循环机制event-loop】
  • Rmarkdown输出为pdf的方法与问题解决
  • 数字图像处理 -- 眼底图像血管分割方法
  • 后缀数组~
  • 聊一聊接口自动化测试的稳定性如何保障
  • 在 IDEA 中写 Spark 程序:从入门到实践
  • 反向代理、负载均衡与镜像流量:原理剖析、区别对比及 Nginx 配置实践
  • 2025医疗领域AI发展五大核心趋势与路线研究
  • 在Linux系统中安装MySQL,二进制包版
  • 第十二节:性能优化高频题-shallowRef/shallowReactive使用场景
  • 云原生--核心组件-容器篇-7-Docker私有镜像仓库--Harbor
  • 【计网】认识跨域,及其在go中通过注册CORS中间件解决跨域方案,go-zero、gin
  • yolov8+kalman 实现目标跟踪统计人流量
  • redis+lua+固定窗口实现分布式限流
  • 八大排序——直接插入排序/希尔排序