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

盛最多水的容器 接雨水【基础算法精讲 02】

盛雨水最多的容器

链接 : 


11 盛最多水的容器

思路 : 

双指针 :

1.对于两条确定的边界,l和r,取中间的线m与r组成容器,如果m的高度>l的高度,那么整个容器的长度会减小,如果低于l的高度,那么不仅高度可能会减小,长度也一定会减小;

2.取l=0,r=n-1,循环遍历答案即可;

代码 (c++): 

class Solution {
public:int maxArea(vector<int>& height) {int n = height.size();int i=0,j=n-1,ans=0;while(i < j){ans = height[i] < height[j] ? max(ans, (j - i) * height[i++]): max(ans, (j - i) * height[j--]); }return ans;}
};

代码(python) : 

class Solution:def maxArea(self, height: List[int]) -> int:ans = 0l = 0r = len(height)-1while l<r:s = (r-l)*min(height[l],height[r])ans = max(ans,s)if height[l] < height[r]:l += 1else :r -= 1return ans

接雨水

链接 : 

https://leetcode.cn/problems/trapping-rain-water/

思路 : 

假设每个位置都是一个宽度为一的桶;

对于每个位置能够存多少水,取决于左边和右边的最大高度;

法一 : 

用两个数组来表示 前缀 和 后缀的最大值;

详见代码一

时间复杂度  :  O(n)

空间复杂度  : O(n)

法二 : 

双指针 : 

取l=0,r=n-1;

一边遍历一边更新前缀的最大值pre_max 和 后缀的最大值suf_max!

时间复杂度  :  O(n)

空间复杂度  : O(1)

详见代码二

代码 :

代码一 : 

python :

class Solution:def trap(self, height: List[int]) -> int:n = len(height)#  前缀最大值数组fs = [0] * nfs[0] = height[0]for i in range(1,n):fs[i] = max(fs[i-1],height[i])# 后缀和最大值数组es = [0] * nes[-1] = height[n-1]for i in range(n-2,-1,-1):es[i] = max(es[i+1],height[i])ans = 0for h , f , e in zip(height,fs,es):ans += min(f,e)-hreturn ans

代码二 : 

python : 

class Solution:def trap(self, height: List[int]) -> int:n = len(height)l = 0r = n - 1ans = 0pre_max = 0suf_max = 0while l<=r:pre_max = max(pre_max,height[l])suf_max = max(suf_max,height[r])if pre_max < suf_max : ans += pre_max-height[l]l += 1else :ans += suf_max - height[r]r -= 1return ans

c++ : 

class Solution {
public:int trap(vector<int>& a) {int len = a.size();int lmax=a[0],rmax=a[len-1];int l=1,r=len-2;int ans=0;while(l<=r){if(lmax < rmax){ans += max(min(lmax,rmax)-a[l],0);lmax = max(lmax,a[l]);l++; }else{ans += max(min(lmax,rmax)-a[r],0);rmax = max(rmax,a[r]);r--;}}return ans;}
};

相关文章:

盛最多水的容器 接雨水【基础算法精讲 02】

盛雨水最多的容器 链接 : 11 盛最多水的容器 思路 : 双指针 &#xff1a; 1.对于两条确定的边界&#xff0c;l和r,取中间的线m与r组成容器&#xff0c;如果m的高度>l的高度&#xff0c;那么整个容器的长度会减小&#xff0c;如果低于l的高度&#xff0c;那么不仅高度可…...

WordPress主题开发( 十二)之—— 主题的functions.php

WordPress主题开发&#xff08; 十&#xff09;之—— 主题的functions.php 介绍使用functions.php vs. 插件创建和使用functions.php在functions.php中的常见用途1. 使用WordPress钩子2. 启用WordPress功能3. 定义可重用的函数4. 添加自动Feed链接5. 自定义导航菜单6. 文本域加…...

代码的工厂模式

概念&#xff1a; 代码的工厂模式是一种设计模式&#xff0c;用于创建对象实例而无需直接调用构造函数。它提供了一种更加灵活和可维护的方式来创建对象&#xff0c;尤其是在需要根据不同情况创建不同类型的对象时非常有用。工厂模式隐藏了对象的创建细节&#xff0c;使代码更…...

UE5.1编辑器拓展【一、脚本化资产行为,通知,弹窗,高效复制多个同样的资产】

目录​​​​​​​ 插件制作 添加新的类&#xff1a;AssetActionUtility 添加新的模块&#xff1a;EditorScriptingUtilities 路径了解 添加debug的头文件 代码【debug.h】内涵注释&#xff1a; 写函数 .h文件 .cpp文件 插件制作 首先第一步是做一个插件&#xff1a…...

mac openssl 版本到底怎么回事 已解决

在mac 安装node多版本的时候&#xff0c;有可能把原有的 openssl1.1 版本 直接要再一次升级了&#xff0c;无奈的 php环境 编译器是 openssl 1.1 还是 3.0 &#xff0c;今天来个底朝天的找问题。 brew search openssl 有安装 三个版本。 但是错误提示 是第二个版本。 brew …...

AWS】在EC2上创建root用户,并使用root用户登录

最近有项目需要使用AWS的EC2服务器&#xff1b; 在创建服务器实例之后发现&#xff0c;没有root用户&#xff0c;仔细阅读AWS EC2文档&#xff0c;发现默认是ec2-user用户&#xff1b; 那我们需要创建一个root用户 1.创建 root 用户 注意&#xff1a;必须要要在ec2-user用户下…...

9月24日回顾

1.微程序控制器的组成&#xff1a;指令译码器、微地址寄存器&#xff08;输出和暂存控制信息&#xff09;&#xff0c;时序电路、最核心的部件是控制存储器&#xff08;只读ROM组成&#xff09;—用来存储微指令 2.突发读写&#xff1a;比如说突发地址为8&#xff0c;那么只需…...

Spring注册Bean系列--方法1:@Component

原文网址&#xff1a;Spring注册Bean系列--方法1&#xff1a;Component_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring注册Bean的方法&#xff1a;Component。 注册Bean的方法我写了一个系列&#xff0c;见&#xff1a;Spring注册Bean(提供Bean)系列--方法大全_IT利刃出鞘…...

防火墙基础之H3C防火墙和三层交换机链路聚合的配置

H3C防火墙和三层交换机链路聚合的配置 原理概述&#xff1a; 防火墙&#xff08;英语&#xff1a;Firewall&#xff09;技术是通过有机结合各类用于安全管理​与筛选的软件和硬件​设备&#xff0c;帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障&#xff0c;以保…...

管理类联考——数学——汇总篇——知识点突破——算数——记忆

文章目录 整体利用目录大纲/记忆宫殿目录大纲记忆宫殿 局部用各种方法数字编码法常见整除特点 歌决记忆法谐音记忆法理解记忆法比较记忆法转图像记忆法可视化法 整体利用目录大纲/记忆宫殿 目录大纲 记忆宫殿 局部用各种方法 学习记忆——数学篇——汇总——顺口溜记忆法谐…...

leetCode 455.分发饼干 贪心算法

455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&…...

vue3简易文字验证码

大神勿喷&#xff0c;简易版本&#xff0c;demo中可以用一下。 需要几个文字自己codelen 赋值 灵活点直接父组件传过去&#xff0c;可以自己改造 首先创建一个生成数字的js **mathcode.js**function MathCode(num){let str "寻寻觅觅冷冷清清凄凄惨惨戚戚乍暖还寒时候…...

Java 23种设计模式分类概括以及应用介绍

话不多说进入正题~ 创建型模式&#xff1a;5种 单例模式&#xff08;Singleton Pattern&#xff09; 确保一个类只有一个实例&#xff0c;并提供全局访问点&#xff0c;它的主要目的是限制类的实例化并确保所有代码都共享相同的实例。 – 应用&#xff1a;Runtime类、数据库连…...

运筹优化算法常用求解器汇总

运筹学从形成到发展&#xff0c;在此过程中积累的大量理论和方法在国防、能源、制造、交通、金融、通信等各个领域发挥着越来越重要的作用。我们在生产生活中遇到的很多实际问题&#xff0c;都可以通过运筹学所涉及的优化方法对其进行数学建模&#xff0c;表示为数学问题&#…...

字符串函数(一)

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;进阶C语言 字符串函数&#xff08;一&#xff09; 0.前言1.求字符串长度的函数1.1 strlen&#xff08;字符串长度&#xff09; 2.长度不受限制的字符串函数2.1 strcpy&#xff08;字符串拷贝&#xff0…...

Ubuntu 安装 Docker 的详细步骤

文章目录 简介1.更新2.安装必要的软件包2.1 基于阿里源 3.验证 Docker 安装是否成功4.安装后的一些常规设置及常用的命令4.1 启动 Docker4.2 Docker 在系统启动时自动运行4.3 运行一个 Hello World 镜像4.4 查看docker运行状态 欢迎来到这篇关于在 Ubuntu 上安装 Docker 的教程…...

使用Python进行App用户细分

App用户细分是根据用户与App的互动方式对用户进行分组的任务。它有助于找到保留用户&#xff0c;找到营销活动的用户群&#xff0c;并解决许多其他需要基于相似特征搜索用户的业务问题。这篇文章中&#xff0c;将带你完成使用Python进行机器学习的App用户细分任务。 App用户细…...

博弈论——伯特兰德寡头模型(Bertrand Model)

伯特兰德寡头模型(Bertrand Model) 0 引言 在前面几篇文章中&#xff0c;我们介绍了古诺模型(Cournot duopoly model)和斯塔克尔伯格模型(Stackelberg model) 博弈论——连续产量古诺模型(Cournot duopoly model) 博弈论——斯塔克尔伯格模型(Stackelberg model) 这两个模型…...

第一百六十回 SliverPadding组件

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了SliverAppBar组件相关的内容&#xff0c;本章回中将介绍 SliverPadding组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的SliverPadding组件类似Pading组件&#xff0c;它主要用…...

Mapfree智驾方案,怎样实现成本可控?

整理|睿思 编辑|祥威 编者注&#xff1a;本文是HiEV出品的系列直播「智驾地图之变」第二期问答环节内容整理。 元戎启行副总裁刘轩与连线嘉宾奥维咨询董事合伙人张君毅、北汽研究总院智能网联中心专业总师林大洋、主持嘉宾周琳展开深度交流&#xff0c;并进行了答疑。 本期元…...

javascript: Bubble Sort

// Sorting Algorithms int JavaScript /** * file Sort.js * 1. Bubble Sort冒泡排序法 */ function BubbleSort(arry, nszie) {var i, j, temp;var swapped;for (i 0; i < nszie - 1; i){swapped false;for (j 0; j < nszie - i - 1; j){if (arry[j] > arry[j …...

DM数据库根据rowid删除重复的记录

oracle中rowid的用法-CSDN博客 delete from stu a where rowid not in (select max(b.rowid) from stu b where a.nob.no and a.name b.name and a.sex b.sex); //这里max使用min也可以...

【AI视野·今日Robot 机器人论文速览 第四十期】Mon, 25 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 25 Sep 2023 Totally 36 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;CloudGripper, 一套云化的机器抓取人数据采集系统&#xff0c;包含了32个机械臂的集群。(from KTH Royal Institute of Te…...

HashMap底层源码,数据结构

HashMap的底层结构在jdk1.7中由数组链表实现&#xff0c;在jdk1.8中由数组链表红黑树实现&#xff0c;以数组链表的结构为例。 JDK1.8之前Put方法&#xff1a; JDK1.8之后Put方法&#xff1a; HashMap基于哈希表的Map接口实现&#xff0c;是以key-value存储形式存在&#xff0c…...

计算机等级考试—信息安全三级真题八

一、单选题...

番外6:下载+安装+配置Linux

#########配置Linux---后续 step08: 点击编辑虚拟机设置&#xff0c;选择下载好的映像文件.iso进行挂载&#xff1b; step09: 点击编辑虚拟机选项&#xff0c;选择UEFI启动模式并点击确定&#xff1b; step10: 点击开启虚拟机&#xff0c;选择Install rhel &#xff1b; 备注&…...

javascript验证表单字段有效性,使用checkValidity()方法和他的属性

<script type"text/javascript">function LoginCheckValidity(){var txt"";var rmb1document.getElementById("rmb1");if(rmb1.checkValidity()false){if(rmb1.validitionMessageundefined){txt"输入金额有误,金额10-200之间";}…...

pdf怎么调整大小kb?pdf文件过大这样压缩

在日常的工作和生活中&#xff0c;我们常常会遇到需要调整PDF文件大小的问题。有时候&#xff0c;我们需要将大型的PDF文件上传到某些平台&#xff0c;但平台的限制让我们不得不压缩文件的大小。那么&#xff0c;如何有效地调整PDF文件的大小呢&#xff1f; 一、使用嗨格式压缩…...

vue3中的watch

在Vue3中&#xff0c;watch中的参数可以分为两部分&#xff0c;即要监听的响应式数据以及回调函数。 语法格式如下&#xff1a; watch(要监听的响应式数据, 回调函数)除了以上的两个还有其他的参数 immediate&#xff1a;是否在初始化时立即执行一次回调函数&#xff0c;默认…...

开绕组电机零序Bakc EMF-based无感控制以及正交锁相环inverse Park-based

前言 最近看论文遇到了基于反Park变换的锁相环&#xff0c;用于从开绕组永磁同步电机零序电压信号中提取转子速度与位置信息&#xff0c;实现无感控制。在此记录 基于零序Back EMF的转子估算 开绕组电机的零序反电动势 e 0 − 3 ω e ψ 0 s i n 3 θ e e_0-3\omega_e\psi_…...

it外包公司上海/杭州seo薪资水平

登录页面&#xff1a; 主页&#xff1a; 错误页面&#xff1a; 步骤流程示意图&#xff1a; 示例代码如下&#xff1a; 在登陆中异常的处理&#xff1a; package com.tarena.netctoss.dao;import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.R…...

今科云平台网站建设/哪个软件可以自动排名

系统安全高手 Dan Rosenberg 发布了一段 C 程序&#xff0c;这段200多行的程序利用了 Linux Econet 协议的3个安全漏洞&#xff0c;可以导致本地帐号对系统进行拒绝服务或特权提升&#xff0c;也就是说一个普通用户可以通过运行这段程序后轻松获得 root shell&#xff0c;以下在…...

公司网站建设工作总结/泰州百度公司代理商

一.导航守卫的使用,实现登录判断 1.首先,去main.vue里面把判断token的beforeCreate生命周期函数去掉,因为我们要在router.js路由里用导航守卫去代替: 二.主页开始 1.布局:使用element-ui 2.逻辑开始 3.面包屑的使用 我们如何在main.vue里访问myBreadcrumd.vue的内容呢?…...

杭州网站建设wguser/seo交流论坛

JavaScript 是一种功能强大的编程语言,广泛用于 Web 和移动开发等。无论您是刚开始学习 JavaScript 的初学者,还是希望更新技能的有经验的开发人员,这 8 个技巧都将帮助您编写更好的代码并提高工作效率。 让我们开始吧: 1. console.log调试你的代码 let x = 10; let y =…...

校园网站建设需求/最经典最常用的网站推广方式

一、请求后端&#xff0c;获取路由数据&#xff0c;处理数据&#xff0c;然后放进router中 下边是一个请求后端获取数据后&#xff0c;处理数据的一个函数&#xff1a; 函数的目的是&#xff1a;1&#xff09;额外添加meta信息&#xff1b;2&#xff09;配置component&#xff…...

wordpress菜单移到右边/企业管理培训班哪个好

《计算机系统维护》摘要本篇论文主要介绍了以下相关内容&#xff1a;1、计算机硬件的配臵现状&#xff0c;主要硬件如CPU,主板&#xff0c;内存等的相关配臵&#xff1b;以及他们的发展及保养。2、软件系统的日常维护&#xff0c;即操作系统的选择与安装&#xff1b;防护软件及…...