盛最多水的容器 - LeetCode 热题 5

news/2024/7/7 20:37:53

大家好!我是曾续缘😛

今天是《LeetCode 热题 100》系列

发车第 5 天

双指针第 2 题

❤️点赞 👍 收藏 ⭐再看,养成习惯

盛最多水的容器

给定一个长度为 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
难度:💖💖

思路

容器盛水越大,肯定是盆越大越好,盆壁越高越好,对应本题就是两个柱子距离越远越好,柱高越高越好,根据木桶效应,再细化点就是两个柱子中较矮的柱子越高越好。

找到了影响答案的两个变量,如何进一步思考?每个柱高是题目给出的,无法事先得到什么规律,对于两柱距离,我们可以使其单调地变化,单调变大不好实现,因为不好确定初始位置,每边的柱子都是只能往一个方向走,不能走完所有可能。单调变小好实现,初始位置为数组的头和尾,相向移动,至少保证一边走完所有可能。

确定了一个两柱距离的变量后(初始位置为数组的头和尾),开始关注柱高(更细点是较矮的柱子的柱高),在保持一边柱子不动的情况下,我们肯定是贪心的移动较矮的柱子使两柱距离变小,因为如果移动高柱子,不管怎么移动高柱子,都确定不可能使得矮柱子变高,也就不会使得盛水变多。移动矮柱子,虽然不确定能否使盛水量变多,但是有可能使其矮柱子变高,甚至高于目前的高柱子。看得出来,我们无法在移动的过程中知道当前的盛水量是否是最大值,在遍历结束后,取过程中的最大值作为答案。

解题方法

水量等于两个指针指向的数字中较小值 ∗ 指针之间的距离
开始时我们把两个指针指向数组的头和尾, 这时指针之间的距离是最大的,
把两个指针向中间移动的过程中, 可以知道指针之间的距离是不会变大而是变小的,
接下来就只需要考虑两个指针指向的数字中较小值了, 为了让较小值变得尽可能大, 我们移动较小值的指针.
在上面移动的过程中,会有多个可能的答案, 我们取最大值.

Code

class Solution {
    public int maxArea(int[] height) {
        int ans = 0, l = 0, r = height.length - 1;
        while(l < r){
            int mn = Math.min(height[l], height[r]);
            int tmp = mn * (r - l);
            ans = Math.max(ans, tmp);
            if(mn == height[l]){
                l++;
            }else{
                r--;
            }
        }
        return ans;
    }
}

http://lihuaxi.xjx100.cn/news/2102532.html

相关文章

基于Python的股票市场分析:趋势预测与策略制定

一、引言 股票市场作为投资领域的重要组成部分&#xff0c;其价格波动和趋势变化一直是投资者关注的焦点。准确预测股票市场的趋势对于制定有效的投资策略至关重要。本文将使用Python编程语言&#xff0c;结合时间序列分析和机器学习算法&#xff0c;对股票市场的历史数据进行…

python提取身份证中的生日和性别

1.代码 def sfzAnalysis(idNum):#检查身份证长度是否正确if len(idNum)!18:raise ValueError("身份证号码长度不正确&#xff0c;请输入一个18位的身份证号码。")#raise关键字在Python中有多种用途&#xff0c;主要涉及异常的抛出和错误处理#提取出生日期year idN…

AI基础知识(2)--决策树,神经网络

1.什么是决策树&#xff1f; 决策树是一类常见的机器学习方法&#xff0c;决策树是基于树的结构来进行决策。决策过程中提出的每一个问题都是对于属性的“测试”&#xff0c;决策的最终结论对应了我们希望的判定结果。一个决策树包含一个根节点&#xff0c;若干个内部节点和若…

拌合楼管理系统开发(四) 功能模块和数据表设计-收货管理

前言:继续闭门造车 上篇文章主要写了生产到发货的管理逻辑设想,这篇文章主要考虑对原材料的入如何做管理了.其中需要考虑来料加工的场景,也就是生产的原材料是客户提供给我们的. 一、业务流程&#xff1a; 1. 自主采购原材料收货&#xff1a; 自主原材料采购收货&#xff0c;由…

小白DB补全计划Day1-LeetCode:SQL基本操作select

前言&#xff1a;找工作&#xff08;主人&#xff09;的任务罢了 链接&#xff1a;1757. 可回收且低脂的产品 - 力扣&#xff08;LeetCode&#xff09; 584. 寻找用户推荐人 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 对DB篇的SQL章不太知道怎么写…

【算法】KY85 二叉树

描述 ** ** 如上所示&#xff0c;由正整数1&#xff0c;2&#xff0c;3……组成了一颗特殊二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是&#xff0c;结点m所在的子树中一共包括多少个结点。 比如&#xff0c;n 12&#xff0c;m 3那么上图中的结点13&#xff0…

如何给狸花猫挑选健康的猫粮?

亲爱的猫友们&#xff0c;我们都知道&#xff0c;狸花猫是我们可爱的家庭成员&#xff0c;它们的健康和快乐对我们来说至关重要。那么&#xff0c;如何给狸花猫挑选一款健康的猫粮呢&#xff1f;今天&#xff0c;就让我来给大家支支招吧&#xff01; 1️⃣ 了解狸花猫的营养需求…

前端三件套 | 综合练习:模拟抽奖活动,实现一个简单的随机抽取并显示三名获胜者

随机运行结果如下&#xff1a; 参考代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…