模块一——双指针:11.盛最多水的容器

文章目录

  • 题目解析
  • 算法原理
    • 解法一:暴力枚举(超时)
    • 解法二:双指针+单调性
  • 代码实现
    • 暴力枚举(超时)
    • 双指针+单调性(时间复杂度为O(N),空间复杂度为O(1))

题目解析

题目链接:11.盛最多水的容器
在这里插入图片描述
这道题简单理解为要我们求长方形的面积就行了。

算法原理

解法一:暴力枚举(超时)

枚举出能构成的所有容器,找出其中容积最⼤的值。
容器容积的计算⽅式:
设两指针left,right分别指向⽔槽板的最左端以及最右端,此时容器的宽度为right-left。由于容器的⾼度由两板中的短板决定,因此可得容积公式: v = (right-left) * min( height[left], height[right]).

解法二:双指针+单调性

  • 设两个指针left ,right 分别指向容器的左右两个端点,此时容器的容积: v = (right - left) * min(height[right], height[left])
  • 容器的左边界为height[left] ,右边界为height[right] 。
  • 为了⽅便叙述,我们假设「左边边界」⼩于「右边边界」。

如果此时我们固定⼀个边界,改变另⼀个边界,⽔的容积会有如下变化形式:

  • 容器的宽度⼀定变⼩。
  • 由于左边界较⼩,决定了⽔的⾼度。如果改变左边界,新的⽔⾯⾼度不确定,但是⼀定不会超过右边的柱⼦⾼度,因此容器的容积可能会增⼤。
  • 如果改变右边界,⽆论右边界移动到哪⾥,新的⽔⾯的⾼度⼀定不会超过左边界,也就是不会超过现在的⽔⾯⾼度,但是由于容器的宽度减⼩,因此容器的容积⼀定会变⼩的。

由此可⻅,左边界和其余边界的组合情况都可以舍去。所以我们可以left++ 跳过这个边界,继续去判断下⼀个左右边界。
当我们不断重复上述过程,每次都可以舍去⼤量不必要的枚举过程,直到left 与right 相遇。期间产⽣的所有的容积⾥⾯的最⼤值,就是最终答案。

代码实现

暴力枚举(超时)

class Solution {
public:int maxArea(vector<int>& height) {int maxVolume = 0,n = height.size();for(int left = 0;left < n;left++){for(int right = left;right < n;right++){maxVolume = max(maxVolume,(right - left) * min(height[left],height[right]));}}return maxVolume;}
};

双指针+单调性(时间复杂度为O(N),空间复杂度为O(1))

class Solution {
public:int maxArea(vector<int>& height) {int left = 0,right = height.size() - 1;//双指针int maxVolume = 0;//记录结果while(left < right){maxVolume = max(maxVolume,(right - left) * min(height[left],height[right]));if(height[left] > height[right])right--;else left++;}return maxVolume;}
};

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

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

相关文章

C++的移动语义和完美转发

参考《现代C语言核心特性解析》 移动语义 C11新特性的std::move()用于将一个左值转换为右值引用。它并不是实际移动或复制数据&#xff0c;而是通过将一个左值强制转换为一个右值引用来实现对对象的转移。这个特性在C11中引入&#xff0c;用于优化对象移动操作的效率。 我们…

万界星空科技电子装配行业MES解决方案

电子电器装配属于劳动密集型、科技含量较高的行业&#xff0c;产品零部件种类繁多&#xff0c;生产组装困难&#xff0c;生产过程存在盲点&#xff0c;同时也决定了生产流水线多且对自动化水平要求较高。 万界星空科技提供的电子行业MES解决方案&#xff0c;提供从仓储管理、生…

pytorch——房价预测

1、首先对数据进行读取和预处理 2、读取数据后&#xff0c;对x数据进行标准化处理&#xff0c;以便于后续训练的稳定性&#xff0c;并转换为tensor格式 3、接下来设置训练参数和模型 这里采用回归模型&#xff0c;既yx*weight1bias1&#xff0c;设置的学习率为0.0006&#x…

perl脚本中使用eval函数执行可能有异常的操作

perl脚本中有时候执行的操作可能会引发异常&#xff0c;为了直观的说明&#xff0c;这里举一个json反序列化的例子&#xff0c;脚本如下&#xff1a; #! /usr/bin/perl use v5.14; use JSON; use Data::Dumper;# 读取json字符串数据 my $json_str join(, <DATA>); # 反…

《地理信息系统原理》笔记/期末复习资料(12. 地理信息工程)

目录 12. 地理信息工程 12.1. 地理信息系统工程的概念 12.2. 地理信息系统工程建设过程 12.2.1. 应用型地理信息系统设计步骤和方法 12.2.2. 需求分析 12.2.3. 系统设计 12.2.4. 系统开发与实施 12.2.5. 系统的评价和维护 12.3. GIS标准 12.4. 习题 12. 地理信息工程…

uniapp中this有时打印的是undefined(作用域问题)

this关键字是指当前组件的实例&#xff0c;使用this可以直接访问当前组件中的属性和方法。 比如&#xff0c;在组件的methods中&#xff0c;通过this可以访问组件的data对象&#xff0c;如下所示&#xff1a; export default {data() {return {message: Hello World}},methods:…

vue+高德,百度地图

1&#xff0c;npm安装vue-amap npm install vue-amap --save 2&#xff0c;main.js引入 import VueAMap from vue-amap; Vue.use(VueAMap); VueAMap.initAMapApiLoader({key: ,plugin: [AMap.Autocomplete, AMap.PlaceSearch, AMap.Scale, AMap.OverView, AMap.ToolBar, AMap.…

12.12每日一题(备战蓝桥杯循环输出)

12.12每日一题&#xff08;备战蓝桥杯循环输出&#xff09; 题目 1002: 【入门】编程求解123...n题目描述输入输出样例输入 复制样例输出 复制来源/分类 题解 1002: 【入门】编程求解123...n题目 1741: 【入门】求出1~n中满足条件的数的个数和总和&#xff1f;题目描述输入输出…

CNN、LeNet、AlexNet基于MNIST数据集进行训练和测试,并可视化对比结果

完成内容&#xff1a; 构建CNN并基于MNIST数据集进行训练和测试构建LeNet并基于MNIST数据集进行训练和测试构建AlexNet并基于MNIST数据集进行训练和测试对比了不同网络在MNIST数据集上训练的效果 准备工作 import torch import torch.nn as nn import torch.optim as optim …

git切换分支

切换到你想要保留的分支&#xff1a; 确保你在本地已经切换到了你想要保留的分支。 git checkout 要保留的分支名更改远程仓库地址&#xff1a; 如果你还没有更改远程仓库地址&#xff0c;使用 git remote set-url 来更改它。 git remote set-url origin 新的仓库地址推送当前分…

高通SDX12:nand flash适配

一、SBL阶段 代码流程如下: boot_images\core\storage\flash\src\dal\flash_nand_init.c nand_probe ->nand_intialize_primary_hal_device ->>nand_get_device_list_supportedboot_images\core\storage\flash\src\dal\flash_nand_config.c ->>>flash_n…

ue4 解决角度万向锁的问题 蓝图节点

问题&#xff1a;当角度值从359-1变化的时候&#xff0c;数值会经历358、357… 解决方法&#xff1a;勾上Shortest Path&#xff0c;角度值的会从359-1

华为 Auth-HTTP Server 1.0 任意文件读取漏洞复现 [附POC]

文章目录 华为 Auth-HTTP Server 1.0 任意文件读取漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现0x06 修复建议华为 Auth-HTTP Server 1.0 任意文件读取漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内…

React Context:跨层级组件共享状态参数、状态

前言 通常情况下&#xff0c;我们通过props将参数从父组件传递给子组件&#xff0c;达到组件间状态参数共享的目的。但是面对嵌套了多层组件的情况&#xff0c;继续使用props一层一层的传递参数是非常冗余和繁琐的。 对于这种包含多层组件的传参&#xff0c;React提供了 Cont…

Kubernetes实战(十三)-使用kube-bench检测Kubernetes集群安全

1 概述 在当今云原生应用的开发中&#xff0c;Kubernetes已经成为标准&#xff0c;然而&#xff0c;随着其使用的普及&#xff0c;也带来了安全问题的挑战。本文将介绍如何使用kube-bench工具来评估和增强Kubernetes集群的安全性。 2 CIS (Center for Internet Security)简介…

OneCode低代码引擎 V2.0源码结构详解

前言 OneCode今天&#xff08;12月10日&#xff09;正式更新了其V2.0版本。从OneCode的季度版本生命中&#xff0c;可以看到2.0版本还是一个重量级的版本&#xff0c;笔者在收到2.0更新后第一时间下拉了最新的代码。在参考了OneCode 的技术说明后&#xff0c;根据包结构来分析…

MySQL笔记-第16章_变量、流程控制与游标

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第16章_变量、流程控制与游标1. 变量1.1 系统变量1.1.1 系统变量分类1.1.2 查看系统变量 1.2 用户变量1.2.1 用户变量分类1.2.2 会话用户变量…

GoLang EASY 微服务游戏框架 01

1 Overview EASY 是一个go语言编写的框架&#xff0c;兼容性支持go版本1.19&#xff0c;go mod 方式构建管理。它是一个轻型&#xff0c;灵活&#xff0c;自定义适配强的微服务框架。 它支持多种网络协议TCP&#xff0c;websocket&#xff0c;UDP&#xff08;待完成&#xf…

数据可视化:解析跨行业普及之道

数据可视化作为一种强大的工具&#xff0c;在众多行业中得到了广泛的应用&#xff0c;其价值和优势不断被发掘和利用。今天就让我以这些年来可视化设计的经验&#xff0c;讨论一下数据可视化在各个行业中备受青睐的原因吧。 无论是商业、科学、医疗保健、金融还是教育领域&…

剑指 Offer(第2版)面试题 26:树的子结构

剑指 Offer&#xff08;第2版&#xff09;面试题 26&#xff1a;树的子结构 剑指 Offer&#xff08;第2版&#xff09;面试题 26&#xff1a;树的子结构解法1&#xff1a;递归解法2&#xff1a;深度优先搜索序列上做串匹配 剑指 Offer&#xff08;第2版&#xff09;面试题 26&a…