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

leetcode 11. 盛最多水的容器 -java

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

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

在这里插入图片描述

代码:

public static void main(String[] args) {int[] height = new int[]{1,8,6,2,5,4,8,3,7};// 思路: 两个指针 leftIndex rightIndex  水的面积 = min(height[leftIndex],height[rightIndex]) * (rightIndex-leftIndex) 循环比较获取较大的那个面积Integer maxSize = 0;for (int leftIndex = 1; leftIndex < height.length+1 ; leftIndex++) {for (int rightIndex = 1; rightIndex < height.length+1 ; rightIndex++) {maxSize = Math.max(maxSize,Math.min(height[leftIndex],height[rightIndex])*(rightIndex-leftIndex));}}return maxSize;}

双层for循环嵌套-超出时间限制

改进:接水 - 接多少水取决于短版的长度,所以可以使用双指针法,每次比较,保留较大元素的指针不动,较小元素的指针平移寻找更大的指针,直到两个指针相遇

这是因为木桶底部长度在指针在两头时是最大的,指针内移x轴长度一定会减小,这时如果想要获取更大面积,需要获取两个height里较小的那个,让他增大,面积才会增大,所以较小的元素的指针向内循环,寻找更大的值,一直到左右两个指针重合,结束循环

代码:

public static void main(String[] args) {int[] height = new int[]{1,8,6,2,5,4,8,3,7};int left = 0, right = height.length - 1;int ans = 0;while (left < right) {int area = Math.min(height[left], height[right]) * (right - left);ans = Math.max(ans, area);if (height[left] <= height[right]) {++left;}else {--right;}}return ans;
}

思考:遇到双层for循环,需要思考能否用双指针解决性能问题

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

相关文章:

  • Kubernetes CronJob bug解决
  • B站小波变换视频笔记
  • 原创邮件合并Python工具使用说明(附源码)
  • python---变量作用域
  • 零拷贝技术:提升传统I/O的性能
  • 【C++】string 的特性和使用
  • 欢迎走进《励曼旋耕》
  • LintCode第547题-两数组的交集
  • leetcode 49. 字母异位词分组 - java
  • [激光原理与应用-202]:光学器件 - 增益晶体 - Nd:YVO₄增益晶体的制造过程与使用过程
  • vite面试题及详细答案120题(61-90)
  • 简单聊聊PowerShell
  • Effective C++ 条款32:确定你的public继承塑模出 is-a 关系
  • 【读代码】深度解析 SmolAgents Open Deep Research
  • 杰理-AW-断言-log
  • 计算机网络基础(三)
  • [Shell编程] Shell 函数
  • PyQt5技术栈简述
  • .htaccess 文件上传漏洞绕过总结
  • Linux文件操作详解:一切皆文件
  • 编辑距离-二维动态规划
  • SkyWalking-3--Java Agent开发和集成示例
  • AI智能编程工具汇总
  • ComfyUI版本更新---解决ComfyUI的节点不兼容问题
  • MySQL 主备(Master-Slave)复制 的搭建
  • SOLIDWORKS 2025对工具栏等进行了重新布局和优化
  • GoEnhance AI-AI视频风格转换工具
  • gRPC 全面解析与实战 —— 从原理到同步/异步开发全攻略
  • Linux系统编程——进程地址空间
  • GM3568JHF:FPGA+ARM异构开发板环境搭建教程