Hot100之双指针
283移动零
题目
思路解析
那我们就把不为0的数字都放在数组前面,然后数组后面的数字都为0就行了
代码
class Solution {public void moveZeroes(int[] nums) {int left = 0;for (int num : nums) {if (num != 0) {nums[left++] = num;// left最后会变成数组中不为0的数的个数}}for (int i = left; i < nums.length; i++) {nums[i] = 0;}return;}
}
11盛最多水的容器
题目
思路解析
如果中间的水高度小,宽度又小,那肯定不会比蓝色这个区域大
如果中间的高度>=它的高度,但我们的宽度小
但我们容纳的水宽度变小高度不变
也不会比蓝色的面积大
因为中间的任何线都无法和他构成更大的容器了
因为我们计算的高度是取决于短板的,宽度是变化的(收缩宽度甚至变小)
所以我们有个left左指针,right右指针
然后我们不断收缩,哪边高度小,哪边就开始收缩,因为计算的高度是取决于短板的
代码
class Solution {public int maxArea(int[] height) {int max = 0;int left = 0, right = height.length - 1;while (left < right) {// right - left 是我们的长度// 如果右边的高度大一点我们就 left++, 如果左边的高度大一点我们就 right-- 这样子不断收缩max = height[left] < height[right] ?Math.max(max, (right - left) * height[left++]) :Math.max(max, (right - left) * height[right--]);}return max;}
}
15三数之和
题目
三个数的和+起来为0
同时i!=j!=k
思路解析
我们要求的结果是nums【a】+nums【b】+nums【c】=0
我们的思路是for循环遍历a,然后求b,c
用两个指针操作,一个向右找一个向左找
我们先对数组进行排序,Arrays,sort()
如果我们的nums【0】>0,说明没负数,那说明我们的和不可能为0了我们直接return
然后判断去重,例如nus【i】==nums【i-1】我们就跳过,因为我们的nums【i-1】已经计算过答案了,我们【1,1,-2,0】我们没必要再利用第二个1了,所以我们直接去重
然后我们要判断和
因为我们的数组排序后是从小到大的
所以如果我们sum<0,我们就left++
如果我们的sum>0,我们就right--
如果我们找到了答案,我们就双指针收缩,left++,right--(双指针搜索前,我们要看看我们的判断条件,例如我们是找到最右边的left和最左边的right,这样子我们双指针收缩的时候,我们就不会得到重复的答案)
代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> result = new ArrayList<>();// 先对数组进行排序Arrays.sort(nums);// 如果排序后最小的元素都大于 0,不可能存在三个数之和为 0 的情况if (nums.length > 0 && nums[0] > 0) {return result;}// 遍历数组,固定一个数作为三元组的第一个数for (int i = 0; i < nums.length; i++) {// 去重:如果当前数和前一个数相同,跳过if (i > 0 && nums[i] == nums[i - 1]) {continue;}int left = i + 1;int right = nums.length - 1;// 使用双指针法寻找另外两个数while (left < right) {int sum = nums[i] + nums[left] + nums[right];if (sum > 0) {// 和大于 0,右指针左移right--;} else if (sum < 0) {// 和小于 0,左指针右移left++;} else {// 找到一个三元组result.add(Arrays.asList(nums[i], nums[left], nums[right]));// 对第二个数和第三个数去重while (left < right && nums[left] == nums[left + 1]) {left++;}while (left < right && nums[right] == nums[right - 1]) {right--;}// 双指针同时收缩left++;right--;}}}return result;}
}
42接雨水
题目
我们要求下雨的时候我们能接多少水
思路解析
我们有三种解法,前后缀分解,双指针解法,单调栈写法
前后缀分解
我们要计算能接多少水,就要计算左边木板的高度和右边木板的高度,这两个高度取最小值
左边木板的高度取决于左边的最大高度
因为高于这个高度的水,他是会从左边流出去的
而低于这个高度的水,他是不会流出去的
右边的木板高度同理,它取决于右边的最大高度
我们要有一个数组要从左到右,存储前缀的最大值
还要有一个数组从右到左,存储后缀的最大值
我们可以Max(上一个前缀最大值,当前高度),这样子来取我们的前缀最大值
从左到右的前缀最大值
后缀最大值同理
然后我们把水桶里面能接的水都加起来,这样子我们就得到了答案
双指针(可以进行空间优化)
优化的点:我们不利用两个数组去收集我们的前后缀和,而是通过双指针不断移动来模拟max前缀和max后缀
因为我们的这个位置能收集的水取决于左边的最大高度和右边的最大高度之间的最小高度
所以我们单个位置单个位置收集
答案为:(左边的最大高度和右边的最大高度之间的最小高度)-当前高度
但一开始例如最左边节点,我们的左边的最大高度
最右边节点,我们的右边的最大高度是固定的
所以我们左边右边一个一个收集节点,然后通过左右指针更新我们的最大左右高度
单调栈
我们相当于把坑填平了,所以我们只要记录5和4就好了
例如2这个节点
我们5和4下标之间距离是宽度
Min(5,4)之间的最小值和当前节点的高度的差 就是高度
所以我们除了知道栈顶那个数是什么,还要知道栈顶那个数是什么
找上一个更大元素,在找的过程中填坑
如果收集的时候出现了5,3,6这种中间有凹的能收集的情况,我们就算这个位置
所以我们弄一个栈,每次出现凹凸情况的时候我们就收集雨水
代码
前后缀分解
class Solution {public int trap(int[] height) {int n = height.length;int[] preMax = new int[n]; // preMax[i] 表示从 height[0] 到 height[i] 的最大值preMax[0] = height[0];for (int i = 1; i < n; i++) {preMax[i] = Math.max(preMax[i - 1], height[i]);}int[] sufMax = new int[n]; // sufMax[i] 表示从 height[i] 到 height[n-1] 的最大值sufMax[n - 1] = height[n - 1];for (int i = n - 2; i >= 0; i--) {sufMax[i] = Math.max(sufMax[i + 1], height[i]);}int ans = 0;for (int i = 0; i < n; i++) {ans += Math.min(preMax[i], sufMax[i]) - height[i]; // 累加每个水桶能接多少水}return ans;}
}==
双指针
class Solution {public int trap(int[] height) {int ans = 0;int left = 0;int right = height.length - 1;int preMax = 0; // 前缀最大值,随着左指针 left 的移动而更新int sufMax = 0; // 后缀最大值,随着右指针 right 的移动而更新while (left < right) {preMax = Math.max(preMax, height[left]);sufMax = Math.max(sufMax, height[right]);ans += preMax < sufMax ? preMax - height[left++] : sufMax - height[right--];}return ans;}
}
单调栈
class Solution {public int trap(int[] height) {int result = 0;int n = height.length;Deque<Integer> deque = new ArrayDeque<>();for (int i = 0; i < n; i++) {// 这个的意思是,如果收集的时候出现了5,3,6这种中间有凹的能收集的情况,我们就算这个位置while (!deque.isEmpty() && height[i] >= height[deque.peek()]) {int temp = height[deque.pop()];// 如果队列为空了,我们就跳出循环 if (deque.isEmpty()) {break;}int left = deque.peek();int dh = Math.min(height[left], height[i]) - temp; // 面积的高result += dh * (i - left - 1);}deque.push(i);}return result;}
}
相关文章:
Hot100之双指针
283移动零 题目 思路解析 那我们就把不为0的数字都放在数组前面,然后数组后面的数字都为0就行了 代码 class Solution {public void moveZeroes(int[] nums) {int left 0;for (int num : nums) {if (num ! 0) {nums[left] num;// left最后会变成数组中不为0的数…...
租房管理系统实现智能化租赁提升用户体验与运营效率
内容概要 在当今快速发展的租赁市场中,租房管理系统的智能化转型显得尤为重要。它不仅帮助房东和租客之间建立更高效的沟通桥梁,还优化了整个租赁流程。通过智能化技术,这套系统能够自动处理资产管理、合同签署、财务管理等所有关键环节。这…...
spring和Mybatis的逆向工程
在现代企业级开发中,使用Spring和MyBatis进行快速、高效的数据库操作是非常常见的。本文将深入探讨如何使用Spring和MyBatis进行逆向工程,帮助开发者自动生成数据库相关的代码,提高开发效率和代码质量。 一、什么是逆向工程 逆向工程是指从…...
计算机网络 IP 网络层 2 (重置版)
IP的简介: IP 地址是互联网协议地址(Internet Protocol Address)的简称,是分配给连接到互联网的设备的唯一标识符,用于在网络中定位和通信。 IP编制的历史阶段: 1,分类的IP地址: …...
松灵机器人 scout ros2 驱动 安装
必须使用 ubuntu22 必须使用 链接的humble版本 #打开can 口 sudo modprobe gs_usbsudo ip link set can0 up type can bitrate 500000sudo ip link set can0 up type can bitrate 500000sudo apt install can-utilscandump can0mkdir -p ~/ros2_ws/srccd ~/ros2_ws/src git cl…...
【Leetcode 每日一题】541. 反转字符串 II
问题背景 给定一个字符串 s s s 和一个整数 k k k,从字符串开头算起,每计数至 2 k 2k 2k 个字符,就反转这 2 k 2k 2k 字符中的前 k k k 个字符。 如果剩余字符少于 k k k 个,则将剩余字符全部反转。如果剩余字符小于 2 k…...
掌握API和控制点(从Java到JNI接口)_35 JNI开发与NDK 03
3、 如何载入 .so档案 VM的角色 由于Android的应用层级类别都是以Java撰写的,这些Java类别转译为Dex型式的Bytecode之后,必须仰赖Dalvik虚拟机器(VM: Virtual Machine)来执行之。 VM在Android平台里,扮演很重要的角色。此外,在执…...
解锁豆瓣高清海报(二) 使用 OpenCV 拼接和压缩
解锁豆瓣高清海报(二): 使用 OpenCV 拼接和压缩 脚本地址: 项目地址: Gazer PixelWeaver.py pixel_squeezer_cv2.py 前瞻 继上一篇“解锁豆瓣高清海报(一) 深度爬虫与requests进阶之路”成功爬取豆瓣电影海报之后,本文将介绍如何使用 OpenCV 对这些海报进行智…...
【C/C++】Windows SAPI自实现文字转语音
本文通过封装Windows SAPI(Speech Application Programming Interface),提供了一个现代化的C接口实现文字转语音功能。主要特性包括支持同步/异步语音合成、可调节语速(-10到10)和音量控制(0-100%ÿ…...
openmv的端口被拆分为两个 导致电脑无法访问openmv文件系统解决办法 openmv USB功能改动 openmv驱动被更改如何修复
我之前误打误撞遇到一次,直接把openmv的全部端口删除卸载然后重新插上就会自动重新装上一个openmv端口修复成功,大家可以先试试不行再用下面的方法 全部卸载再重新插拔openmv 要解决OpenMV IDE中出现的两个端口问题,可以尝试以下步骤&#x…...
8.攻防世界Web_php_wrong_nginx_config
进入题目页面如下 尝试弱口令密码登录 一直显示网站建设中,尝试无果,查看源码也没有什么特别漏洞存在 用Kali中的dirsearch扫描根目录试试 命令: dirsearch -u http://61.147.171.105:53736/ -e* 登录文件便是刚才登录的界面打开robots.txt…...
音叉模态分析
目录 0 序言 1 自由状态下模态求解 1.1 添加模态项目 1.2 生成网格 1.3 设置最大模态阶数 1.4 求解 1.5 结果查看 1.6 结果分析 2 音叉能否释放频率440Hz的音调 3 预应力模态求解 3.1 静态结构分析 3.1.1 添加静态结构项目 3.1.2生成网格 3.1.3添加边界条件 3.1…...
智慧园区系统集成解决方案引领未来城市管理的智能化转型
内容概要 在现代城市管理的背景下,“智慧园区系统集成解决方案”正扮演着越来越重要的角色。这种解决方案不仅仅是技术上的创新,更是一种全新的管理理念,它旨在通过高效的数据整合与分析,优化资源配置,提升运营效率。…...
(即插即用模块-特征处理部分) 二十、(TPAMI 2022) Permute-MLP 置换MLP模块
文章目录 1、Permute-MLP layer2、代码实现 paper:Vision Permutator: A Permutable MLP-Like Architecture for Visual Recognition Code:https://github.com/Andrew-Qibin/VisionPermutator 1、Permute-MLP layer 传统的 MLP-like 模型(如…...
FBX SDK的使用:基础知识
Windows环境配置 FBX SDK安装后,目录下有三个文件夹: include 头文件lib 编译的二进制库,根据你项目的配置去包含相应的库samples 官方使用案列 动态链接 libfbxsdk.dll, libfbxsdk.lib是动态库,需要在配置属性->C/C->预…...
爬虫基础(二)Web网页的基本原理
一、网页的组成 网页由三部分构成:HTML、JavaScript、CSS。 (1)HTML HTML 相当于网页的骨架,它通过使用标签来定义网页内容的结构。 举个例子: 它把图片标签为img、把视频标签为video,然后组合到一个界面…...
1.4 Go 数组
一、数组 1、简介 数组是切片的基础 数组是一个固定长度、由相同类型元素组成的集合。在 Go 语言中,数组的长度是类型的一部分,因此 [5]int 和 [10]int 是两种不同的类型。数组的大小在声明时确定,且不可更改。 简单来说,数组…...
爬虫基础(三)Session和Cookie讲解
目录 一、前备知识点 (1)静态网页 (2)动态网页 (3)无状态HTTP 二、Session和Cookie 三、Session 四、Cookie (1)维持过程 (2)结构 正式开始说 Sessi…...
hive:基本数据类型,关于表和列语法
基本数据类型 Hive 的数据类型分为基本数据类型和复杂数据类型 加粗的是常用数据类型 BOOLEAN出现ture和false外的其他值会变成NULL值 没有number,decimal类似number 如果输入的数据不符合数据类型, 映射时会变成NULL, 但是数据本身并没有被修改 创建表 创建表的本质其实就是在…...
Maya软件安装步骤与百度网盘链接
软件简介: MAYA软件是Autodesk旗下的著名三维建模和动画软件。maya软件功能更为强大,体系更为完善,因此国内很多的三维动画制作人员都开始转向maya,maya软件已成为三维动画软件的主流。 百度网盘链接: https://pan.baidu.com/s…...
error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
Descriptions: Solutions:...
PID算法的数学实现和参数确定方法
目录 概述 1 算法描述 1.1 PID算法模型 1.2 PID离散化的图形描述 1.3 PID算法的特点 2 离散化的PID算法 2.1 位置式PID算法 2.2 增量式PID算法 2.3 位置式PID与增量式PID比较 3 控制器参数整定 3.1 PID参数确定方法 3.1.1 凑试法 3.1.2 临界比例法 3.1.3 经验法…...
【已解决】ECharts 没有在页面生效
元素高度问题: ECharts 需要一个具有明确高度的容器来渲染图表,也就是说 echartsRef 元素需要一个明确的 div 高度。我项目中的问题就是在 .base-echarts(我项目中的最外层元素) 上设置了高度为 300px,但没有为 .echar…...
三角函数正交性应用--以信号分离为例
三角函数的正交性的应用 引言 在信号处理、通信等众多领域中,三角函数的正交性发挥着至关重要的作用。它不仅是理论分析的基础,更是实际应用中解决各种问题的有力工具。本文将详细介绍三角函数正交性的定义、证明,并通过一个具体的信号处理…...
ASP.NET Core 中使用依赖注入 (DI) 容器获取并执行自定义服务
目录 一、ASP.NET Core 中使用依赖注入 (DI) 容器获取并执行自定义服务 1. app.Services 2. GetRequiredService() 3. Init() 二、应用场景 三、依赖注入使用拓展 1、使用场景 2、使用步骤 1. 定义服务接口和实现类 2. 注册服务到依赖注入容器 3. 使用依赖注入获取并…...
一个数如果恰好等于他的因子之和,这是就成为“完数“,例如6=1+2+3.编程找出1000以内的所有完数
from sys import stdoutfor i in range(2,1001):k[] #用于存储因子si #初始化s为当前数字ifor j in range(1,i):if i%j0: #如果j是i的因子s-j #从s中减去银子jk.append(j) #将因子j加入列表kif s0:#如果s最终为0,说明i是一个完数print(i)for j in range(len(k)): #遍历银子列表…...
理解 InnoDB 如何处理崩溃恢复
在数据库领域,数据的一致性与可靠性至关重要。InnoDB 存储引擎的崩溃恢复机制是保障数据安全的核心,其中 Doublewrite Buffer 和 Redo Log 发挥着关键作用。下面,我们将详细探讨 InnoDB 从写入到崩溃恢复的全过程。 一、写入流程 修改页面&…...
Linux-CentOS的yum源
1、什么是yum yum是CentOS的软件仓库管理工具。 2、yum的仓库 2.1、yum的远程仓库源 2.1.1、国内仓库 国内较知名的网络源(aliyun源,163源,sohu源,知名大学开源镜像等) 阿里源:https://opsx.alibaba.com/mirror 网易源:http://mirrors.1…...
Redis复制
一、Redis复制: 1.为了解决分布式中单点故障问题,通常会把数据复制多个副本部署到其他机器上来解决故障恢复和负载均衡等需求。 2.建立复制 参与复制的redis实例划分为主节点(master)和从节点(slave),每个从…...
小白怎样部署和使用本地大模型DeepSeek ?
1 安装Ollama (1) 下载Ollama 从https://ollama.com/download 下载, 根据你的系统下载对应的版本,支持Win, Mac ,Linux: 如果下载不了,右键复制链接地址,贴到迅雷,指定可以下载下来。 (2) 安…...
ECharts 样式设置
ECharts 样式设置 引言 ECharts 是一款功能强大的可视化库,广泛用于数据可视化。样式设置是 ECharts 中的重要一环,它能够帮助开发者根据需求调整图表的视觉效果,使其更加美观和易于理解。本文将详细介绍 ECharts 的样式设置,包…...
Java synchronized关键字和锁分类
专栏系列文章地址:https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标: 关于synchronized已经有很多博主很细致的讲解了,本文主要是通过代码例子再次理解下,并要求能头脑反射出相关知识点主要是锁分类的知识…...
Vue.js 新的生命周期钩子:`onMounted`, `onUpdated` 等
Vue.js 新的生命周期钩子:onMounted, onUpdated 等 今天我们来聊聊 Vue 3 中的生命周期钩子,特别是 onMounted、onUpdated 等。如果你对如何在 Vue 3 的组合式 API(Composition API)中使用这些钩子感到困惑,那么这篇文…...
OpenCV:闭运算
目录 1. 简述 2. 用膨胀和腐蚀实现闭运算 2.1 代码示例 2.2 运行结果 3. 闭运算接口 3.1 参数详解 3.2 代码示例 3.3 运行结果 4. 闭运算的应用场景 5. 注意事项 相关阅读 OpenCV:图像的腐蚀与膨胀-CSDN博客 OpenCV:开运算-CSDN博客 1. 简述…...
Android 音视频编解码 -- MediaCodec
引言 如果我们只是简单玩一下音频、视频播放,那么使用 MediaPlayer SurfaceView 播放就可以了,但如果想加个水印,加点其他特效什么的,那就不行了; 学习 Android 自带的硬件码类 – MediaCodec。 MediaCodec 介绍 Med…...
移动互联网用户行为习惯哪些变化,对小程序的发展有哪些积极影响
一、碎片化时间利用增加 随着生活节奏的加快,移动互联网用户的碎片化时间越来越多。在等公交、排队、乘坐地铁等间隙,用户更倾向于使用便捷、快速启动的应用来满足即时需求。小程序正好满足了这一需求,无需下载安装,随时可用&…...
数据分析系列--②RapidMiner导入数据和存储过程
一、下载数据 二、导入数据 1. 在本地计算机中创建3个文件夹 2. 从本地选择.csv或.xlsx 三、界面说明 四、存储过程 1.保存 Congratulations, you are done. 一、下载数据 点击下载AssociationAnalysisData.xlsx数据集 二、导入数据 1. 在本地计算机中创建3个文件夹 2. 从…...
Prometheus 中的 Exporter
在 Prometheus 生态系统中,Exporter 扮演着至关重要的角色,它们负责从不同的服务或系统中收集和暴露度量数据。本文将详细介绍 Exporter 的概念、类型以及如何有效使用它们将 Prometheus 集成到各种系统中进行监控。 什么是 Exporter? Exporter 是一段软件,它从应用程序或…...
从 HTTP/1.1 到 HTTP/3:如何影响网页加载速度与性能
一、前言 在最近使用Apipost时,突然注意到了http/1.1和http/2,如下图: 在我根深蒂固的记忆中,对于http的理解还停留在TCP协议、三次握手。由于我的好奇心,于是触发了我被动“开卷”,所以有了这篇文章&…...
GenAI 在金融服务领域的应用:2025 年的重点是什么
作者:来自 Elastic Karen Mcdermott GenAI 不是魔法 我最近参加了 ElasticON,我们与纽约 Elastic 社区一起度过了一天,讨论了使用检索增强生成 (retrieval augmented generation - RAG) 为大型语言模型 (large language models - LLMs) 提供…...
小红书文案生成器(基于openai API和streamlit)
prompt_text.py: # 专门用来放提示文本(系统提示、用户提示)system_prompt_text """ 你是小红书爆款写作专家,请你遵循以下步骤进行创作:首先产出5个标题(包含适当的emoji表情)…...
Spring AOP 入门教程:基础概念与实现
目录 第一章:AOP概念的引入 第二章:AOP相关的概念 1. AOP概述 2. AOP的优势 3. AOP的底层原理 第三章:Spring的AOP技术 - 配置文件方式 1. AOP相关的术语 2. AOP配置文件方式入门 3. 切入点的表达式 4. AOP的通知类型 第四章&#x…...
力扣面试150 快乐数 循环链表找环 链表抽象 哈希
Problem: 202. 快乐数 👩🏫 参考题解 Code public class Solution {public int squareSum(int n) {int sum 0;while(n > 0){int digit n % 10;sum digit * digit;n / 10;}return sum;}public boolean isHappy(int n) {int slow n, fast squa…...
【实战篇章】深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据
文章目录 深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据一、服务器如何响应前端请求HTTP 请求生命周期全解析1.前端发起 HTTP 请求(关键细节强化版)2. 服务器接收请求(深度优化版) 二、后端如何查看前…...
《AI大模型开发笔记》DeepSeek技术创新点
一、DeepSeek横空出世 DeepSeek V3 以颠覆性技术架构创新强势破局!革命性的上下文处理机制实现长文本推理成本断崖式下降,综合算力需求锐减90%,开启高效 AI 新纪元! 最新开源的 DeepSeek V3模型不仅以顶尖基准测试成绩比肩业界 …...
【大模型LLM面试合集】大语言模型架构_MHA_MQA_GQA
MHA_MQA_GQA 1.总结 在 MHA(Multi Head Attention) 中,每个头有自己单独的 key-value 对;标准的多头注意力机制,h个Query、Key 和 Value 矩阵。在 MQA(Multi Query Attention) 中只会有一组 k…...
实战技巧:如何快速增加网站的收录页面?
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/43.html 要快速增加网站的收录页面,可以从以下几个方面进行实战优化: 一、内容优化 高质量原创内容 确保网站内容具备高质量与原创性,满足搜索引擎对独…...
20-30 五子棋游戏
20-分析五子棋的实现思路_哔哩哔哩_bilibili20-分析五子棋的实现思路是一次性学会 Canvas 动画绘图(核心精讲50个案例)2023最新教程的第21集视频,该合集共计53集,视频收藏或关注UP主,及时了解更多相关视频内容。https:…...
PYH与MAC的桥梁MII/MIIM
在学习车载互联网时,看到了一句话,Processor通过DMA直接存储访问与MAC之间进行数据的交互,MAC通过MII介质无关接口与PHY之间进行数据的交互。常见的以太网硬件结构是,将MAC集成进Processor芯片,将PHY留在Processor片外…...
pytorch基于 Transformer 预训练模型的方法实现词嵌入(tiansz/bert-base-chinese)
以下是一个完整的词嵌入(Word Embedding)示例代码,使用 modelscope 下载 tiansz/bert-base-chinese 模型,并通过 transformers 加载模型,获取中文句子的词嵌入。 from modelscope.hub.snapshot_download import snaps…...