首页 > 其他分享 >leet code 11. 盛最多水的容器

leet code 11. 盛最多水的容器

时间:2023-10-26 14:03:20浏览次数:28  
标签:11 leet right int height ans 最多水 指针 left

leet code 11. 盛最多水的容器

题目描述

给定一个长度为 n 的整数数组 height 。

有 n 条垂线,

第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

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

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

说明:你不能倾斜容器。

leet code 11. 盛最多水的容器_Math

提示:

  • n == height.length
  • leet code 11. 盛最多水的容器_ide_02
  • leet code 11. 盛最多水的容器_双指针_03

题目解析

本题利用双指针解决。那么引申出两个问题

  • 如何利用双指针解决问题
  • 双指针解决——为什么是对的,如何证明?

双指针解题思路过程验证

  1. 初始化数组的左右边界为左右指针,那么计算出 盛水量 = min(height[left], height[right]) * (right - left)
  1. 很显然,左右指针谁指向的元素值更小,应该移动谁
  2. 为什么?
  1. 因为盛水量的多少取决于较短的一条边
  2. 所以移动较短的一条边,才有可能找到更多的盛水方案
  1. 如果左右两边高度相同
  1. 那么可以随意移动其中一条边
  2. 计算盛水量始终取决于较短的边,所以任意移动左右指针之后,计算出的面积不会大于移动之前
  3. 因为其底部长度减少了.

show code

class Solution {
    public int maxArea(int[] height) {
        int n = height.length;
        int left = 0,right = n - 1;
        int ans = 0;
        while(left < right) {
            // 底边长度计算.
            int rSide = right - left;
            // 计算得出较短的边.
            int hSide = Math.min(height[left], height[right]);
            // 计算盛水量.
            ans = Math.max(ans, rSide * hSide);

            if(height[left] < height[right]) {
                left++;
            } else {
                right--;
            }
        }
        return ans;
    }
}

标签:11,leet,right,int,height,ans,最多水,指针,left
From: https://blog.51cto.com/u_16079703/8033675

相关文章

  • 2023-2024-1 20211108_20211120_20211103_20211125 实验一:开发环境的熟悉 小组实验过
    实验课小组成员20211108俞振阳、20211120刘钟徽、20211103白皓宇、20211125苗靖章实验一-1-交叉编译环境-(使用自己笔记本电脑)实验题目要求实验三人一组可以使用自己的笔记本,也可以使用实验室台式机,使用实验室机器的不用做本题安装老师提供的software目录中的VMware-works......
  • 20211325 2023-2024-1 《信息安全系统设计与实现(上)》第七周学习笔记
    202113252023-2024-1《信息安全系统设计与实现(上)》第七周学习笔记一、任务要求1.自学教材第4章,提交学习笔记(10分),评分标准如下1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知......
  • kvm安装windows11
    创建虚拟机挂载iso配置虚拟机内存等硬件信息选择Customizeconfigureationbeforeinstall因为有些东西需要配置,如果不配置启动安装,会有问题配置启动项在BootOptions增加光驱启动项,并且放置到最上面开始安装点击左上角BeginInstallation,开始安装配置禁止tpm检测安装w......
  • oracle 11g 由于0rc4km05kgzb9占用undo 使用率高问题
    设置参数解决altersystemset"_smu_debug_mode"=33554432;设置这个之后v$undostat.tuned_undoretention会取(maxquerylensecs+300)和参数undo_retention里的最大值altersystemset"_undo_autotune"=false;直接禁用了AutomaticTuningofUndoRetention特性altersystem......
  • [11章]技术大牛成长课,从0到1带你手写一个数据库系统
    点击下载——[11章]技术大牛成长课,从0到1带你手写一个数据库系统 提取码:y31p 这是一套一步步带着大家从0开始写一个数据库系统的视频教程,2023最新录制,提供有配套的源码资料下载!无论你是数据库内核研发、DBA、还是后端研发,能够手写一套自己的数据库系统,都是你突破技术发展瓶颈的......
  • 在 Windows 11 中,你可以使用 PowerShell 命令 Get-WindowsCapability 来查询 Windows
    在Windows11中,你可以使用PowerShell命令Get-WindowsCapability来查询Windows组件功能。这个命令可以列出当前安装的所有Windows组件功能,以及它们的状态。以下是使用Get-WindowsCapability命令查询Windows组件功能的步骤:打开PowerShell终端:可以通过在任务栏中搜......
  • P3214 [HNOI2011] 卡农 题解
    感觉不是很麻烦,可能就组合排列转化绕一点。。。抽象化题意给定\(n\)个元素,从中选出\(m\)个集合,要求:集合不为空,集合里不能有相同的元素\(m\)个集合都互不相同所有元素被选出的次数为偶数求方案数,并对\(100000007\)取模凭感觉是DP+组合数设\(dp[i][0/1]\)......
  • 111
    ......
  • linux vmware导出windows11到virtual box
    如果直接使用virtualbox导入会报错Hostresourceoftype"OtherStorageDevice(20)"issupportedwithSATAAHCIorvirtio-scsicontrollersonly,line48(subtype:vmware.nvme.controller).找到导出目录下的ovf文件,上面说的是48行,那么找到48行<Item>......
  • pytest报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 1
    报错UnicodeDecodeError:'utf-8'codeccan'tdecodebyte0xc3inposition11:invalidcontinuationbyte代码运行时,报错 可以看出是编码的问题,根据提示,有可能是__init__.py文件的问题,通过查看源代码:尝试改变"utf-8"为“gbk"路径:C:\python3.8\Lib\site-packages\inic......