LeetCode11.盛水最多的容器

news2024/11/16 11:48:31

11. 盛最多水的容器

该题用的是贪心的思想,也即每一步都以更加靠近最值为目标,用双指针维护height数组,接下来我用我自己通俗的语言尽可能解释双指针这种做法的正确性:

首先双指针指向数组两端,从两端开始,此时计算出一个res1值,res初始是0,所以此时res的值肯定被更新成了res1。

之后就到了最关键的问题了,接下来是哪个指针进行移动?先别着急,与其摆上高大上的证明,不如我们先用通俗的笨方法。

我们所有情况都假设一遍:

  • 第一种情况:移动指向数字较大的那个指针。这种情况会出现什么呢?首先,朝另一个指针的方向移动这个指针,两个指针的距离肯定会减小,其次,若移动的是指向数字较大的指针,移动后,这个指针指向的数字无非三种情况:

    • 移动后更大,如果是移动后更大,那么此时容器的高还是不变(因为容器的高取决于更小的那个数字嘛),高不变,结果俩指针距离还减小了,容器的容量肯定是必减小无疑,这不符合贪心的思想,也对解题无益。
    • 移动后不变,情况同移动后更大。
    • 移动后更小,如果减小的幅度不大,减小之后还是比另一个指针更大,那情况依然同上;如果减小之后,比另外一个指针还更小了,则此时容器的高就更新成现在这个指针的数字,但是高减小,距离也减小,容器的容量同样也是必减小无疑,同样不符合贪心思想,对解题无益。
  • 第二种情况:移动指向数字较小的指针,当然,其实答案也很明显了,第一种情况排除了,我们肯定就是采取这种情况了,为什么是这种情况呢?我们同样也可以分析一下,移动指向数字较小的指针,移动之后,指针指向的数字同样也有几种情况:

    • 移动后更大,移动后如果数字增大幅度不够大,没有大过另外一个指针指向的数字,此时容器的高还是这个指针的数字,但是增大了一点,虽然距离减小,但是高增大,所以容器的容量有可能是会增大的,值得一博。如果增大幅度足够大,那肯定就更好了,容器容量增大的幅度会更大。
    • 移动后不变,这个情况就有点倒霉,容器容量肯定是减小的,因为高不变,距离减小了
    • 移动后更小,这个也是更倒霉,同上分析,容器容量肯定减小。

    综上,尽管第二种情况(即移动指向数字更小的指针)也有两种废物情况,但是有一种情况是有将容器容量提升的机会的,相比于第一种情况(即移动指向数字较大的指针)一无是处,所有情况都铁定不能让容器增大的差劲表现来看,明显是取第二种情况,也即我们每次都移动指向数字更小的指针,才有机会将res不断更新增大的可能。

    其实,为了便于理解,这个道理也可以映射到生活当中,木桶效应相信很多人都知道,很多人也知道,想要更好地提升自己,永远都是需要先从自己的短板入手,以前高三给自己制定提分目标的时候,大家都知道,如果你的强项是英语,每次都能135 140+,那如果你设定提高英语的目标,然后一直去猛刷英语题,换来的提升会很小很小,而且还不一定能成,性价比会很低很低。但如果数学是你的弱项,你每次都是110 120,你设定一个提升到135 甚至140的目标,那么这种提升就会更加容易的多,也会有更加明显的效果。所以刷算法题中的思想还是很励志的,贪心这个词虽然在日常生活中像是个贬义词,但在算法的思想里确实一个很好的词汇,这个思想指引我们解决问题的时候不要将就,每一步都朝着更好的方向去行走,宁愿不走,我也永远不朝更坏的方向去走,永远积极向上,算法如此,人生亦然。

ps:我们上面这段文字,LeetCode官网上也有很好的公式推导,写得非常非常好,我本人就是看完力扣官方题解才想写一个详细的个人理解文字版,但其实公式推导比文字看起来易懂得多。下面附上y总对这个题目的一个证明。

在这里插入图片描述

class Solution {
public:
    int maxArea(vector<int>& height) {
        int res = 0;
        for(int i = 0, j = height.size()-1;i < j;)
        {
            res = max(res,min(height[i],height[j]) * (j - i));
            if(height[i]<height[j]) i++;
            else j--;
        }
        return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/130536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

必看!Salesforce发布2023年全球科技重要趋势和预测

Salesforce领导者处于影响企业的最新趋势、技术和挑战的前线&#xff0c;通过市场分析、客户对话等方面带来专业知识和洞察力。距离2023年还剩不到一周的时间&#xff0c;未来一年企业应该如何布局&#xff0c;技术会如何发展&#xff0c;值得我们密切关注。 企业需要了解的5项…

IB分数如何影响您的大学申请?

参加 2022 年 11 月 IB 考试的学生将于 1 月 2 日收到IBDP&IBDP相关课程的分数。 大多数在新加坡提供 IB 课程的国际学校都在每年 5 月参加考试。 但是有些学校在 11 月参加 IBDP 考试。其中包括圣约瑟国际学院(SJII)、英华学校(ACS)、澳大利亚国际学校(SAIS)、华中国际学校…

牛客竞赛每日俩题 - 动态规划3

目录 类01背包问题&#xff0c;选or不选 变种走方格 类01背包问题&#xff0c;选or不选 不同的子序列_牛客题霸_牛客网 问题翻译&#xff1a; S有多少个不同的子串与T相同 S[1:m]中的子串与T[1:n]相同的个数 由S的前m个字符组成的子串与T的前n个字符相同的个数 状态&#xf…

SHA3算法笔记

文章目录1 INTRODUCTION2 GLOSSARY3 KECCAK-p Permutations3.1 State3.1.2 Converting Strings to State Arrays3.1.3 Converting State Arrays to Strings3.1.4 Labeling Convention for the State Array3.2 Step Mappingsthetarhopichiiota3.3 KECCAK-p[b, n~r~]3.4 KECCAK-f…

如何使用 Blackbox Exporter 监控 URL?

前言 监控域名和 URL 是可观察性的一个重要方面&#xff0c;主要用于诊断可用性问题。接下来会详细介绍如何使用 Blackbox Exporter 和 Prometheus 在 Kubernetes 中实现 URL 监控。 Blackbox Exporter 简介 Blackbox Exporter 是 Prometheus 的一个可选组件&#xff0c;像其…

离散变量贝叶斯决策简介

贝叶斯决策 最小风险&#xff1a; min⁡R(αi∣x)∑j1cλ(αi∣ωj)P(ωj∣x)\min R\left(\alpha_i \mid \mathrm{x}\right)\sum_{j1}^c \lambda\left(\alpha_i \mid \omega_j\right) P\left(\omega_j \mid \mathrm{x}\right) minR(αi​∣x)j1∑c​λ(αi​∣ωj​)P(ωj​∣x…

django笔记《内置用户认证系统》

文章目录1 前言2 django.contrib.auth3 使用django的用户认证系统3.1 创建一个新的django项目3.2 做数据库迁移3.3 auth_user表结构3.4 创建一个新用户3.5 User对象3.5.1 创建用户 create_user3.5.2 request.user3.5.3 用户在视图函数中登录3.5.4 关键函数3.6 保护视图函数的方…

每日一问-ChapGPT-20221231-关于中医的各国看法

文章目录每日一问-ChapGPT系列起因每日一问-ChapGPT-20221231-关于中医的各国看法各个国家对伤寒论的看法日本对于中医的看法韩国对于中医的看法欧美对于中医的看法中国对于中医的看法当日总结每日一问-ChapGPT系列起因 近来看了新闻&#xff0c;看了各种媒体&#xff0c;抖音…

程序员必须要了解的内存知识——硬件

最近阅读了Ulrich Drepper大牛的论文《What Every Programmer Should Know About Memory》&#xff0c;全文114页&#xff0c;尽管2007年出版&#xff0c;但如今看过来&#xff0c;仍干货满满。接来下对文中提及的知识&#xff0c;结合自己对内存知识的理解&#xff0c;对程序员…

前端面试题汇总-Vue篇

1. Vue的基本原理 当一个Vue实例创建时&#xff0c;Vue会遍历data中的属性&#xff0c;用 Object.defineProperty&#xff08;vue3.0使用proxy &#xff09;将它们转为 getter/setter&#xff0c;并且在内部追踪相关依赖&#xff0c;在属性被访问和修改时通知变化。 每个组件实…

APP专项测试

一、安装/卸载/升级更新 分类测试点安装1. 通过第三方软件协助安装是否正常 2. 在不同的操作系统下安装是否正常 3. 安装过程中断网&#xff0c;安装是否正常 4. 安装后的文件夹以及文件是否写到了指定的目录里 5. 软件安装过程是否可以取消&#xff0c;点击取消后&#xff0c…

Windows 10/11玩游戏时第二显示器延迟怎么办?

现在很多人都会给自己的电脑外接一个显示屏&#xff0c;来提高工作效率&#xff0c;或增强游戏体验&#xff0c;但有时候第二块显示器会出现延迟、卡顿、掉帧等问题。 不过驱动小百科整理了几个缓解Win 10/Win 11上第二显示器延迟的方法&#xff1a; 更改显示器刷新率关闭占用…

阿里云物联网智能视频服务接入

物联网视频服务&#xff08;LinkVisual&#xff09;支持视频流上云、存储、转发、告警事件等视频基础能力&#xff0c;提供丰富的视频算法以及云边协同&#xff08;算法云端训练、云端下发、边缘计算推理&#xff09;服务。旨在帮助视频设备厂商、方案商与服务提供商&#xff0…

Mac退出移动硬盘时显示“磁盘无法推出,因为一个或多个程序正在使用它”解决方案

解决方法1. 重启访达2. 重启电脑3. 终端命令行方法4. df -lh不显示移动磁盘名称时的解决方法1. 重启访达 按住option键&#xff0c;在底部程序坞的访达图标右键&#xff0c;选择重新启动。此时访达app会重启&#xff0c;之后尝试推出即可。 或&#xff1a;点击左上角苹果标&a…

CSDN 2021-2022年微博情感数据分析

微博情感分析是一种用于提取微博文本中的情感倾向的方法。它可以帮助企业了解人们对于某个主题的看法和态度。 如果要进行微博情感分析&#xff0c;需要准备一些微博数据。可以使用爬虫程序爬取相关微博数据&#xff0c;这里使用的 Scrapy 框架进行的数据爬虫。可以使用文本分…

JavaWeb:Servlet概述

1.1 简介 Servlet是JavaWeb最为核心的内容&#xff0c;它是Java提供的一门动态web资源开发技术。 使用Servlet就可以实现&#xff0c;根据不同的登录用户在页面上动态显示不同内容。 Servlet是JavaEE规范之一&#xff0c;其实就是一个接口&#xff0c;将来我们需要定义Servle…

产品经理的需求分析四个层次

产品经理的需求分析四个层次&#xff1a; 1、第一层次是实现需求&#xff0c;即客户要啥做啥。 2、第二层次是分析转换需求&#xff0c;即客户的真正需求&#xff0c;可能实际和他提的需求不一样&#xff0c;比如客户只是要过河&#xff0c;却提出造一个轮船。所以产品经理需要…

MPS | 简单易用的工业电源模块

工业与医疗应用中&#xff0c;在较高输入电压条件下&#xff0c;输出正压和负压的应用需求越来越多。 在应对输出负压条件时&#xff0c;传统解决方案电路复杂且体积庞大&#xff0c;研发周期较长。以半导体测试为例&#xff0c;新一代的测试机通常需要具备以下特点&#xff1…

TCP三次握手四次挥手详解

三次握手 第一次&#xff1a;客户端发送请求连接的报文&#xff1b;SYN1&#xff0c;表请求建立连接的报文&#xff1b;seq,序列号&#xff0c;随机。 第二次&#xff1a;服务端发送请求连接和同意连接的报文&#xff1b;ACK1&#xff0c;表示确认号有用&#xff1b;ackx1&am…

【一起从0开始学习人工智能】0x01机器学习基础+初次实践

从零开始----到敲出一个推荐系统 文章目录人工智能概述流派能做什么什么是机器学习数据集构成机器学习算法分类机器学习开发流程学习框架和资料怎么做机器学习库与框架可用数据集sklearn使用自带数据集sklearn数据集使用拿到的数据是否全部用来训练模型人工智能概述 人工智能-…