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

【2025-02-06】简单算法:相向双指针 盛最多水的容器 接雨水

📝前言说明:
●本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,主要跟随B站博主灵茶山的视频进行学习,专栏中的每一篇文章对应B站博主灵茶山的一个视频
●题目主要为B站视频内涉及的题目以及B站视频中提到的“课后作业”。
●文章中的理解仅为个人理解。
●文章中的截图来源于B站博主灵茶山,如有侵权请告知。

🎬个人简介:努力学习ing
📋本专栏:python刷题专栏
📋其他专栏:C语言入门基础以及python入门基础
🎀CSDN主页 愚润求学

视频

  • 一,题目汇总
  • 二,视频题目
    • 1,11.成最多水的容器
    • 2,42.接雨水

一,题目汇总

●视频题目题号:
1142

二,视频题目

1,11.成最多水的容器

●题目:
在这里插入图片描述

●题解:
找最大面积:判断什么时候会有更大面积。
如果选定了一组边,如图中的红色,则面积由短边决定,且在这组边内的任意一条边与短边的组合不糊再大于原来的面积,因为:当找到更长边时,面积还是由短边决定,但是长变短了。如果找到更短边时,长(x轴)和宽(y轴)都变短了
所以,改变短边的指针的指向别的边才可能会产生更大的面积

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

2,42.接雨水

题目:
在这里插入图片描述
题解:
对每个长度为一的坑进行单独分析:
如果没有柱子,则一个坑能接的水取决于这个坑的前面柱子中的最大柱子和后面柱子中的最大柱子(由短的决定能接的水的数量),即某一个长为一的坑能接水的高度为max(前缀最大值,后缀最大值)
如果算上柱子,则减去柱子的柱高就是长度为一的坑的接水量
方法一:
创建两个额外的数组,用来保存每个坑的前缀和后缀的最大值,每个坑的前缀最大值为:max(上个坑的前缀最大值,该坑高度)

class Solution:def trap(self, height: List[int]) -> int:ans = 0n = len(height)pre_max = [0] * nsuf_max = [0] * n# 初始化前后缀最大值的数组pre_max[0] = height[0]for i in range(1, n):pre_max[i] = max(pre_max[i-1], height[i])suf_max[-1] = height[-1]for i in range(n-2, -1, -1):suf_max[i] = max(suf_max[i+1], height[i])for h, pre, suf in zip(height, pre_max, suf_max):ans += min(pre, suf) - hreturn ans

方法二:双向指针(明确了移动哪一边)
分析:因为每个坑能装水的高度是由min(前缀最大值,后缀最大值) - h决定的,所以,我们可以对短边进行计算,计算完后,移动短边到下一个坑
代码:

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

🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

相关文章:

【2025-02-06】简单算法:相向双指针 盛最多水的容器 接雨水

&#x1f4dd;前言说明&#xff1a; ●本专栏主要记录本人的基础算法学习以及LeetCode刷题记录&#xff0c;主要跟随B站博主灵茶山的视频进行学习&#xff0c;专栏中的每一篇文章对应B站博主灵茶山的一个视频 ●题目主要为B站视频内涉及的题目以及B站视频中提到的“课后作业”。…...

2.6-组合博弈入门

组合博弈入门 组合游戏 要求 有两个玩家&#xff1b;游戏的操作状态是一个有限的集合&#xff08;比如&#xff1a;限定大小的棋盘&#xff09;&#xff1b;游戏双方轮流操作&#xff1b;双方的每次操作必须符合游戏规定&#xff1b;当一方不能将游戏继续进行的时候&#xf…...

【教学】推送docker仓库

引言 Docker Hub 这个最常见的公共 Docker 仓库为例&#xff0c;本文将介绍如何把本地 Docker 镜像推送到公共 Docker 仓库 1. 注册 Docker Hub 账号 如果你还没有 Docker Hub 账号&#xff0c;需要先在 Docker Hub 官网 进行注册。注册完成后&#xff0c;记住你的用户名和密…...

【大数据技术】本机PyCharm远程连接虚拟机Python

本机PyCharm远程连接虚拟机Python 注意:本文需要使用PyCharm专业版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本地PyCharm远程连接虚拟机,运行Python脚本,提高编程效率。 注意: …...

3060显卡掉帧是为什么?3060掉帧卡顿解决方法

NVIDIA GeForce RTX 3060是一款性能强劲的显卡&#xff0c;它可以在高画质的情况下运行大多数的游戏&#xff0c;但是也有一些用户反映&#xff0c;3060玩游戏时会出现掉帧和卡顿的现象&#xff0c;这让很多玩家感到困扰。那么&#xff0c;3060显卡掉帧是什么原因呢&#xff1f…...

Kubernetes集群通过Filebeat收集日志

Filebeat收集容器日志&#xff0c;其中NODE_NAME配置&#xff0c;是将node信息添加到日志中&#xff0c;所以需要serviceAccount权限&#xff0c;如果不需要配置NODE信息&#xff0c;可以不创建serviceAccount&#xff0c;其他内容可根据实际情况修改 apiVersion: v1 kind: Ser…...

SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具

SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具 一、SQLAIchemy的介绍二、数据库引擎1、支持的数据库1.1、sqlite数据库1.2、MySQL数据库1.3、数据库引擎的参数 三、定义模型类1、定义模型2、engine负责数据库迁移 四、alembic数据库迁移⼯具1、安装alembic2、初始化alemb…...

[含文档+PPT+源码等]精品基于Python实现的django个性化健康餐计划订制系统

软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#xff1a;JavaScript、VUE.js&#xff08;2.X&#xff09;、css3 开发工具&#xff1a;pycharm、Visual Studio Code、HbuildX 数据库&#xff1a;MySQL 5.7.26&am…...

Python3中异常处理:try/except语句

一. 简介 什么是异常处理 &#xff1f; 在 Python中&#xff0c;异常处理是一种用于管理程序运行时错误的机制。通过使用异常处理&#xff0c;你可以编写更加健壮和可靠的代码。 Python 提供了 try&#xff0c;except&#xff0c;else和 finally关键字来处理异常&#xff0c…...

[ Spring] Integrate Spring Boot Dubbo with Nacos 2025

文章目录 Dubbo Project StructureDeclare Plugins and RepositoriesIntroduce DependenciesDubbo Consumer PropertiesDubbo Provider ApplicationDubbo Provider ServiceDubbo Consumer PropertiesDubbo Consumer ApplicationDubbo Consumer ControllerCommand References Du…...

【3分钟极速部署】在本地快速部署deepseek

第一步&#xff0c;找到网站&#xff0c;下载&#xff1a; 首先找到Ollama &#xff0c; 根据自己的电脑下载对应的版本 。 我个人用的是Windows 我就先尝试用Windows版本了 &#xff0c;文件不是很大&#xff0c;下载也比较的快 第二部就是安装了 &#xff1a; 安装完成后提示…...

【QT笔记】使用QScrollArea实现多行文本样式显示

目录 一、QScrollArea 的基本概念 二、demo代码 三、实现效果 1、页面空间足够&#xff0c;无滚动条时显示效果 2、有滚动条时显示效果 一、QScrollArea 的基本概念 QScrollArea 是 Qt 框架中用于提供一个滚动条区域&#xff0c;允许用户滚动查看比当前可视区域更大的内容…...

大模型中提到的超参数是什么

在大模型中提到的超参数是指在模型训练之前需要手动设置的参数&#xff0c;这些参数决定了模型的训练过程和最终性能。超参数与模型内部通过训练获得的参数&#xff08;如权重和偏置&#xff09;不同&#xff0c;它们通常不会通过训练自动学习&#xff0c;而是需要开发者根据任…...

【Uniapp-Vue3】z-paging插件组件实现触底和下拉加载数据

一、下载z-paing插件 注意下载下载量最多的这个 进入Hbuilder以后点击“确定” 插件的官方文档地址&#xff1a; https://z-paging.zxlee.cn 二、z-paging插件的使用 在文档中向下滑动&#xff0c;会有使用方法。 使用z-paging标签将所有的内容包起来 配置标签中的属性 在s…...

UE虚幻引擎No Google Play Store Key:No OBB found报错如何处理

UE虚幻引擎No Google Play Store Key&#xff1a;No OBB found报错如何处理&#xff1f; 问题描述&#xff1a; UE成功打包APK并安装过后&#xff0c;启动应用时提示&#xff1a; No Google Play Store KeyNo OBB found and no store key to try to download. Please setone …...

OKHttp拦截器解析

OKHttp涉及到拦截器大概的执行步骤为&#xff1a; 1.通过newCall生成RealCall对象 具体代码如下&#xff1a; Override public Call newCall(Request request) {return new RealCall(this, request, false /* for web socket */);}2.调用Call的execute方法 当然这也可以是执…...

STM32标准库移植RT-Thread nano

STM32标准库移植RT-Thread Nano 哔哩哔哩教程链接&#xff1a;STM32F1标准库移植RT_Thread Nano 移植前的准备 stm32标准库的裸机代码&#xff08;最好带有点灯和串口&#xff09;RT-Thread Nano Pack自己的开发板 移植前的说明 本人是在读学生&#xff0c;正在学习阶段&a…...

c++11总结26——std::regex

std::regex 是 C11 引入的 正则表达式库&#xff0c;用于 字符串匹配、搜索和替换。 &#x1f539; 头文件&#xff1a;#include <regex> &#x1f539; 命名空间&#xff1a;std &#x1f539; 支持的匹配模式&#xff1a;ECMAScript&#xff08;默认&#xff09;、POS…...

langchain教程-12.Agent/工具定义/Agent调用工具/Agentic RAG

前言 该系列教程的代码: https://github.com/shar-pen/Langchain-MiniTutorial 我主要参考 langchain 官方教程, 有选择性的记录了一下学习内容 这是教程清单 1.初试langchain2.prompt3.OutputParser/输出解析4.model/vllm模型部署和langchain调用5.DocumentLoader/多种文档…...

leetcode_双指针 125.验证回文串

125.验证回文串 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是回文串 &#xff0c;返回 true &#xff…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...