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

算法升级之路(七)-盛最多水的容器

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

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

返回容器可以储存的最大水量。
原题链接: 盛最多水的容器

解题思路:
这道题乍一看没什么思路,用暴力循环的话太麻烦了,要从第一个循环剩下的所有,第二个循环剩下的所有,第三个。。。
我也是看了答案之后才明白怎么算,其实很简单。

这个盛水的面积= min(height[i],height[j])*(j-i);

从i=0 和j=heigh.length-1算起
在这个状态下只要挪动板子,(j-i)都是会变小

min(height[i],height[j] 只有变大才有机会变大

由于求的是最小值,那么只有最小值变大,面积才有变大的可能。
所以每次挪动最小的板子,直到两个板子重合,就能得出最大面积。

代码

 public int maxArea(int[] height) {int area = 0;int front =0;int backend =height.length-1;while(front!=backend){int   current =Math.min(height[front],height[backend])*(backend-front);if(current>area){area = current;}if(height[front]<height[backend]){front++;}else{backend--;}}return area;}

这个算法让我有种我当年上高中事,做题做不出,老师一讲就听懂了的感觉,梦回高三。
我啥时候才能到这种水平呀

http://www.lryc.cn/news/236328.html

相关文章:

  • milvus数据库索引管理
  • JVM中的 -Xms参数 设置 JVM 的初始堆大小
  • Idea 创建 Spring 项目(保姆级)
  • C++多线程学习(一):C++11 多线程快速入门
  • Linux系统之lsof命令的基本使用
  • 性能压力测试的优势与重要性
  • AtCoder Beginner Contest 329 题解A~F
  • Windows网络「SSL错误问题」及解决方案
  • python数据可视化
  • LV.12 D18 中断处理 学习笔记
  • 蓝桥杯每日一题2023.11.19
  • <b><strong>,<i><em>标签的区别
  • c++中的特殊类设计
  • 开源更安全? yum源配置/rpm 什么是SSH?
  • 庖丁解牛:NIO核心概念与机制详解 04 _ 分散和聚集
  • Java读写Jar
  • 【四元数简述】
  • ClickHouse SQL 查询优化
  • 「Verilog学习笔记」数据选择器实现逻辑电路
  • 【Go入门】Web工作方式
  • 综述:目标检测二十年(机翻版)(未完
  • quinn源码解析:QUIC数据包是如何发送的
  • scss的高级用法——循环
  • Linux安装Chrome浏览器 -linux安装choeme
  • 六大排序(插入排序、希尔排序、冒泡排序、选择排序、堆排序、快速排序)未完
  • JVM垃圾回收相关概念
  • C++各种字符转换
  • MSSQL-逻辑级常用命令
  • 【如何学习Python自动化测试】—— 时间等待
  • 《数字图像处理-OpenCV/Python》连载(44)图像的投影变换