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

LeetCode100之盛最多水的容器(11)--Java

1.问题描述

        给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量

        注意

        你不能倾斜容器

        示例1

输入:[1,8,6,2,5,4,8,3,7]
输出:49 
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

        示例2 

输入:height = [1,1]
输出:1

        提示

  • n == height.length
  • 2 <= n <= 105
  • 0 <= height[i] <= 104

        难度等级

              中等

        题目链接

        盛最多水的容器

2.解题思路

        这道题是让我们在其中找出盛水最多的容器,我们先来简单的分析一下。容器能盛多少水,取决于它的宽度和高度,我们可以定义两个指针从数组的左右两边向中间移动,也就是一开始假设宽度是最大的,然后在左右指针不断移动的过程中,寻找容器所能盛的最多的水。

        //竖直方向容纳多少水取决于最短的高度//水平方向容纳多少水取决于最大的差值int head = 0;int tail = height.length-1;int result = 0;

        容器的高度取决于左右指针的较小值,容器的宽度为左右指针索引的差值,宽*高之后与目前记录的最大值比较,若比最大值大,则更新最大值。

            //宽度int w = tail - head;//取短边作为高度int h = height[head] < height[tail] ? height[head] : height[tail];//更新最大值result = h * w > result ? h * w : result;

        接着,移动较小边的指针,因为我们要盛尽可能多的水,就必须让高尽可能的大,接着重复上述操作,知道指针相遇退出循环。

          //移动短边的指针if(height[head] < height[tail]){head++;}else{tail--;}

3.代码展示

class Solution {public int maxArea(int[] height) {//竖直方向容纳多少水取决于最短的高度//水平方向容纳多少水取决于最大的差值int head = 0;int tail = height.length-1;int result = 0;while(head < tail){//宽度int w = tail - head;//取短边作为高度int h = height[head] < height[tail] ? height[head] : height[tail];//更新最大值result = h * w > result ? h * w : result;//移动短边的指针if(height[head] < height[tail]){head++;}else{tail--;}}return result;}
}

4.总结

        这道题我觉得唯一难的地方就是能不能想到一开始假设两个条件中的宽最大,左右指针从数组左右两边向中间靠拢,其他的地方,我感觉没啥太大的难度。祝大家刷题愉快!

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

相关文章:

  • 【VMware】使用笔记
  • <项目代码>YOLOv8 猫狗识别<目标检测>
  • 存储数据库的传输效率提升-ETLCloud结合HBASE
  • HO-XGBoost河马算法优化极限梯度提升树多变量回归预测(Matlab)
  • 【Hive sql面试题】找出连续活跃3天及以上的用户
  • Linux curl命令下载显示时间/速度/大小
  • sklearn|机器学习:决策树(一)
  • Rust中三种方式使用环境变量
  • 搭建支持国密GmSSL的Nginx环境
  • Docker部署Portainer CE结合内网穿透实现容器的可视化管理与远程访问
  • 不适合的学习方法
  • 在子类中调用父类的构造函数
  • 【K8S系列】Kubernetes 中 Service 的流量不均匀问题【已解决】
  • C-小H学生物
  • 什么是软件设计模式, 它们⽤于解决什么问题, 它们为什么有效
  • LeetCode 3165.不包含相邻元素的子序列的最大和:单点修改的线段树(动态规划)
  • ios 快捷指令扩展(Intents Extension)简单使用 swift语言
  • 虚拟化环境中的精简版 Android 操作系统 Microdroid
  • NFTScan Site:以蓝标认证与高级项目管理功能赋能 NFT 项目
  • Vue:模板 MVVM
  • Kafka 消息丢失如何处理?
  • Mysql报错注入之floor报错详解
  • EPS原理笔记
  • LeetCode 876. 链表的中间结点
  • 划界与分类的艺术:支持向量机(SVM)的深度解析
  • 题目:100条经典C语言笔试题目(1-5)
  • python代码编写规范及注意事项
  • 【Linux】命令行参数 | 环境变量
  • python 使用进程池并发执行 SQL 语句
  • 我也谈AI