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

力扣HOT100-5 盛最多水的容器(Java实现)

题目

题目解读

1.木桶效应,短边决定蓄水量
2.选定i < j,水量 =(j - i) × min(height[i], height[j])

开始解题

一、暴力枚举

思路:

双重循环尝试所有组合(i, j),计算面积并更新最大值。

核心流程:

1.初始化 maxArea = 0。

2.外层循环 i 从 0 到 n-2。

3.内层循环 j 从 i+1 到 n-1:

计算 area = (j - i) * min(height[i], height[j])。

maxArea = max(maxArea, area)。

4.返回 maxArea。

代码

public int maxArea(int[] height) { int n = height.length; int maxArea = 0; for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { int area = (j - i) * Math.min(height[i], height[j]); maxArea = Math.max(maxArea, area); } } return maxArea; }

二、双指针法

思路:

想要一次遍历找到最大水量,我们需要一种聪明的方式排除不可能成为答案的柱子组合

初始时,左右指针放在数组两端(此时宽度最大)。对于当前的两根柱子,容器的水量取决于较矮的那根(短板效应)。
如果我们固定短板,向内移动另一根更高的柱子,宽度减小,但高度最大也只能是短板的高度,因此面积不可能增大。
因此,唯一可能得到更大面积的方法,就是向内移动短板,虽然宽度变小,但有可能遇到更高的短板,从而抬高水位。

所以策略是:每次计算当前面积后,移动高度较小的那个指针。当两个指针相遇时,所有可能的最优解都已被检视过。

核心流程:

1.初始化 left = 0, right = n - 1, maxArea = 0。
2.当 left < right 时循环:
计算当前面积 area = (right - left) * min(height[left], height[right])。
更新 maxArea = max(maxArea, area)。
若 height[left] < height[right],则 left++;否则 right--。
3.返回 maxArea。

代码

public int maxArea(int[] height) { int left = 0, right = height.length - 1; int maxArea = 0; while (left < right) { int minH = Math.min(height[left], height[right]); int area = (right - left) * minH; maxArea = Math.max(maxArea, area); // 移动较短的那边 if (height[left] < height[right]) { left++; } else { right--; } } return maxArea; }

感谢您能够看到这里,一起见证小何同学的算法学习,如果您有不同的见解,希望能得到您的指点和点悟;如果您是和我一样的同学,也希望这篇文章能对您有所帮助。

http://www.jsqmd.com/news/1077555/

相关文章:

  • 摩尔线程发布图形显卡驱动v340.150,创作与游戏体验同步升级
  • BlackDex免Root脱壳:原理、实战与Android应用逆向分析
  • 表征学习实战指南:从原理到ViT自监督预训练
  • 【软工方法论24】软件测试方法论从单元测试到系统测试
  • 多维聚合中的数据重塑、重标与重权操作解析
  • 3步掌握文档下载:彻底解决30+平台付费限制难题
  • 5分钟掌握BOTW存档编辑器:从零到精通的完整实战指南
  • 东西方时尚审美差异量化程序,分别统计男女消费者对中西服饰偏好打分。
  • 免费文档下载工具终极指南:如何用kill-doc脚本突破30+平台限制
  • 数据聚类如何驱动业务决策:从混沌到可执行分群的实战指南
  • 【计算机毕业设计案例】基于 Django + 协同过滤算法的电影收藏推荐管理平台设计与实现 基于 Django + 协同过滤算法的在线观影智能推荐系统(程序+文档+讲解+定制)
  • PianoPlayer深度解析:基于动态规划算法的钢琴指法生成技术实现
  • 拆解 musl libc 启动流程:从 __libc_start_main 到 main() 到底发生了什么?
  • MCP Inspector 调试——开发必备调试工具实战
  • [Android] AudioEditor音频剪辑高级版-多轨+分割+混合+超级好用
  • Sunshine游戏串流终极指南:如何用开源软件打造专业级游戏串流服务器
  • OFDM项目开发(05):FPGA跨时钟域IFFT数据接口设计——异步FIFO + 精准时序控制
  • STM32-S369-存取柜+光敏+灯光+消毒+取件码+二维码+语音播报+存件+手机号录入+后台数据+4舵机+OLED屏+按键+(无线方式选择)-2(设计源文件+万字报告+讲解)(支持资料、图片参考_
  • 循环学习率CLR实战指南:提升收敛速度与泛化能力
  • Adobe-GenP 3.0:开源逆向工程的艺术与实用指南
  • OpenCLIP与Diffusion Bee:AI模型工程化落地实战指南
  • 5大理由:为什么企业需要billd-desk私有化部署的远程控制解决方案
  • LoRA微调实战:在笔记本上高效微调大模型的完整指南
  • Bunny DNS 免费!多维度优化助力构建更快更安全应用
  • 2026年重庆山三云企售后跟进的技术解析与工作要点说明
  • 现代gpu编程系统教程(一) ------- 概述
  • NCMDump是什么?网易云NCM格式转换工具详解及使用教程(附替代方案)
  • 3.7V升压5V2A芯片哪个好?PW6276同步升压低功耗方案
  • 基于 OB2513x开关芯片的PSR DCM模式反激电源的FB波形
  • 欧拉-丸山法在McKean-Vlasov SDE不变测度收敛性中的分析与MATLAB实践