【LeetCode Hot100 子串】和为 k 的子数组、滑动窗口最大值、最小覆盖子串
子串
- 1. 和为 k 的子数组
- 题目描述
- 解题思路
- 主要思路
- 步骤
- 时间复杂度与空间复杂度
- 代码实现
- 2. 滑动窗口最大值
- 题目描述
- 解题思路
- 双端队列的原理:
- 优化步骤:
- Java实现
- 3. 最小覆盖子串
- 题目描述
- 解题思路
- 滑动窗口的基本思路:
- 具体步骤:
- 算法的关键点:
- Java实现
1. 和为 k 的子数组
题目描述
给定一个整数数组 nums
和一个整数 k
,你需要在数组中找到连续子数组的个数,使得这些子数组的和等于 k
。
解题思路
我们可以通过 前缀和 的方法来高效解决这个问题,结合 哈希表 来记录每个前缀和出现的次数,从而迅速计算出满足条件的子数组。
主要思路
-
前缀和的定义:
- 对于数组
nums
,prefix[i]
表示从nums[0]
到nums[i-1]
的和。也就是说,prefix[i] = nums[0] + nums[1] + ... + nums[i-1]
。 - 子数组的和
nums[i..j]
可以表示为:prefix[j+1] - prefix[i]
。因此,如果我们希望找到nums[i..j]
的和为k
,那么只需要满足prefix[j+1] - prefix[i] = k
。
- 对于数组
-
如何利用哈希表:
- 在遍历数组时,我们可以计算当前的前缀和
pre
。 - 然后,我们通过
map.containsKey(pre - k)
来判断是否存在一个前缀和为pre - k
的位置,这样就找到了一个子数组和为k
。 - 我们还需要维护一个哈希表
map
,其中map.get(pre)
表示当前前缀和pre
出现的次数。这样做是为了确保我们能够计算出所有符合条件的子数组。
- 在遍历数组时,我们可以计算当前的前缀和
-
核心算法:
- 初始化哈希表
map
,将0
的计数初始化为 1,因为如果前缀和刚好为k
,就意味着从数组起始位置开始的子数组和为k
。 - 遍历数组并更新前缀和,并利用哈希表记录前缀和的出现次数。
- 初始化哈希表
步骤
-
初始化:
pre = 0
表示当前的前缀和。cnt = 0
表示符合条件的子数组数量。map
存储前缀和及其出现次数,初始时将map.put(0, 1)
,即前缀和为 0 出现 1 次。
-
遍历数组:
- 对于每个元素,更新前缀和
pre
。 - 检查哈希表中是否存在
pre - k
,如果存在,说明从某个位置到当前位置的子数组和为k
,则将其出现次数加到cnt
中。 - 更新哈希表,将当前前缀和
pre
出现的次数加 1。
- 对于每个元素,更新前缀和
-
返回结果:
- 遍历完所有元素后,
cnt
中存储的就是符合条件的子数组数量。
- 遍历完所有元素后,
时间复杂度与空间复杂度
- 时间复杂度:
O(n)
,其中n
是数组nums
的长度。我们只需要遍历一次数组,同时进行常数时间的哈希表操作。 - 空间复杂度:
O(n)
,我们需要使用哈希表存储前缀和及其出现次数,最坏情况下哈希表的大小为n
。
代码实现
class Solution {public int subarraySum(int[] nums, int k) {int len = nums.length;int pre = 0, cnt = 0;HashMap<Integer, Integer> map = new HashMap<>();map.put(0, 1); // 初始化,前缀和为0的有1个,这样做不会忽略掉“从数组起始位置开始的和为 k 的子数组”。for (int i = 0; i < len; i++) {pre += nums[i]; // 计算当前前缀和if (map.containsKey(pre - k)) { // 说明从某个位置到当前位置存在连续子数组和为 kcnt = cnt + map.get(pre - k); // 增加符合条件的子数组的数量}// 更新哈希表,记录当前前缀和出现的次数map.put(pre, map.getOrDefault(pre, 0) + 1); }return cnt; // 返回符合条件的子数组数量}
}
2. 滑动窗口最大值
题目描述
给定一个整数数组 nums
和一个滑动窗口的大小 k
,请你在数组中找出每个滑动窗口的最大值,并返回一个数组。
解题思路
这道题目是一个典型的滑动窗口问题。直接暴力计算每个窗口中的最大值的时间复杂度是 O(n*k)
,这种做法在数据量较大的情况下效率较低。因此,我们可以使用 双端队列(Deque) 来优化这一过程。
双端队列的原理:
- 双端队列是一种支持从两端高效插入和删除的队列结构。我们可以利用它来存储数组元素的下标,并保持队列中的元素按照值的大小顺序排列。这样可以确保队列的第一个元素永远是当前窗口中的最大值。
优化步骤:
及时去掉无用数据,保证双端队列有序(当前数组>=队尾,弹出队尾;弹出队首不在窗口内的元素)
- 使用一个双端队列
q
来存储窗口中的元素的下标。 - 保证队列中的元素下标对应的值是递减的,队列的首部始终是窗口的最大值。
- 每次移动窗口时:
- 入队操作:将新元素的下标加入队列,并从队列的尾部移除所有小于当前元素的值,以保证队列保持递减顺序。
- 出队操作:如果队列头部的元素已经不再在当前窗口范围内(即超出窗口的左边界),则将其从队列中移除。
- 记录结果:当窗口大小达到
k
时,记录当前窗口的最大值,即队列头部的元素。
Java实现
class Solution {public int[] maxSlidingWindow(int[] nums, int k) {int n = nums.length;Deque<Integer> q = new ArrayDeque<>(); // 存的是nums的下标int[] ans = new int[n - k + 1];for (int i = 0; i < n; i++) {// 1. 入队:保持队列中的元素递减while (!q.isEmpty() && nums[i] >= nums[q.getLast()]) {q.removeLast();}q.addLast(i); // 队列存的是下标// 2. 出队:如果队列的第一个元素不在窗口内,移除它if (i - q.getFirst() >= k) {q.removeFirst();}// 3. 存结果:当窗口大小达到k时,记录最大值if (i >= k - 1) {ans[i - k + 1] = nums[q.getFirst()];}}return ans;}
}
3. 最小覆盖子串
题目描述
给定字符串 s
和字符串 t
,找到 s
中包含 t
中所有字符的最小子串。如果 s
中没有包含 t
中所有字符的子串,则返回空字符串。
解题思路
这是一个经典的滑动窗口问题。我们需要在字符串 s
中找到一个最小的子串,该子串包含了 t
中所有字符。最初我们可以考虑暴力解法,但暴力解法会超时,因此我们需要使用 滑动窗口 技巧来优化算法。
滑动窗口的基本思路:
- 滑动窗口的定义:我们维护一个窗口,窗口的大小是可变的,在窗口内包含了
t
中的所有字符。 - 扩展窗口:从字符串
s
的开始位置开始扩展窗口,逐步包含t
中的字符。 - 收缩窗口:当窗口已经包含了
t
中的所有字符时,尝试缩小窗口的大小,以找到更小的符合条件的子串。 - 窗口合法性:当窗口内包含所有
t
中的字符时,窗口是合法的。
具体步骤:
- 使用两个指针
left
和right
表示滑动窗口的左右边界,初始化时都指向字符串s
的开头。 - 使用两个哈希表
cntT
和cntS
来记录t
中字符的出现频率和当前窗口中字符的出现频率。 - 当窗口包含
t
中的所有字符时,尝试缩小窗口的左边界。 - 在每次扩展和收缩窗口时,更新当前的最小子串。
算法的关键点:
- 记录
t
中所有字符的频率。 - 使用两个指针维护滑动窗口。
- 记录窗口内字符的频率并与
t
中的字符频率进行比较。
Java实现
class Solution {public String minWindow(String s, String t) {int ansLeft = -1;int m = s.length();int ansRight = m;// 记录t的字符出现的次数Map<Character, Integer> cntT = new HashMap<>();for (char c : t.toCharArray()) {cntT.put(c, cntT.getOrDefault(c, 0) + 1);}// 记录s的字符出现的次数Map<Character, Integer> cntS = new HashMap<>();int left = 0;int formed = 0; // 记录s和t覆盖的字符的个数int required = cntT.size(); // 记录t中的不同字符的个数for (int right = 0; right < m; right++) {char sr = s.charAt(right);cntS.put(sr, cntS.getOrDefault(sr, 0) + 1);// 如果s中的字符完全匹配t中的字符if (cntT.containsKey(sr) && cntS.get(sr).intValue() == cntT.get(sr).intValue()) {formed++;}// 当s子串能覆盖t的时候收缩窗口while (formed == required) {if (right - left < ansRight - ansLeft) {ansLeft = left;ansRight = right;}// 收缩窗口char leftChar = s.charAt(left);cntS.put(leftChar, cntS.get(leftChar) - 1);if (cntT.containsKey(leftChar) && cntS.get(leftChar).intValue() < cntT.get(leftChar).intValue()) {formed--;}left++;}}return ansLeft < 0 ? "" : s.substring(ansLeft, ansRight + 1); // 左闭右开}
}
相关文章:
【LeetCode Hot100 子串】和为 k 的子数组、滑动窗口最大值、最小覆盖子串
子串 1. 和为 k 的子数组题目描述解题思路主要思路步骤 时间复杂度与空间复杂度代码实现 2. 滑动窗口最大值题目描述解题思路双端队列的原理:优化步骤: Java实现 3. 最小覆盖子串题目描述解题思路滑动窗口的基本思路:具体步骤:算法…...
【CLIP系列】4:目标检测(ViLD、GLIP)
目录 1 ViLD2 GLIP2.1 前言2.2 损失计算2.3 模型框架 1 ViLD OPEN-VOCABULARY OBJECT DETECTION VIA VISION AND LANGUAGE KNOWLEDGE DISTILLATION 从标题就能看出来,作者是把CLIP模型当成一个Teacher,去蒸馏他自己的网络,从而能Zero Shot去…...
vue-谷歌浏览器安装vue-devtools插件
文章目录 一、谷歌浏览器安装vue-devtools1.1、方式一:直接下载crx并安装 本文讲解谷歌浏览器安装vue-devtools插件的步骤。 注意:以下vue-devtools插件都是vue2版本的。 一、谷歌浏览器安装vue-devtools 1.1、方式一:直接下载crx并安装 …...
【安全测试】0基础新手学Web安全测试笔记(一)
文章目录 一、关于账号密码的漏洞二、关于验证码的漏洞三、Burp工具的使用四、渗透测试1. 渗透测试类型2. 脆弱性评估 五、常见的应用安全风险1. 注入2. 失效的身份认证3. 敏感数据泄露4. XML外部实体(XXE)5. 失效的访问控制6. 安全配置错误7. 跨站脚本:(XSS)8. 不安全的反序列…...
初窥强大,AI识别技术实现图像转文字(OCR技术)
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据、人工智能领域创作者。目前从事python全栈、爬虫和人工智能等相关工作,主要擅长领域有:python…...
JDK 14,15,17的一些新特性(部分常用)
1:instanceof(后,使用不再需要墙转) 2:switch语句增强 1:支持lmbda,自动防击穿,有返回值 2:支持case多个值,复杂逻辑结果支持yield返回 3:字符串…...
架构设计系列(二):CI/CD
一、概述 CI/CD 是 持续集成(Continuous Integration) 和 持续交付/持续部署(Continuous Delivery/Continuous Deployment) 的缩写,是现代软件开发中的一套核心实践和工具链,旨在提高软件交付的效率、质量…...
二十六、使用docsify搭建文档管理平台
特性 无需构建,写完文档直接发布容易使用并且轻量 (~19kB gzipped)智能的全文搜索提供多套主题丰富的 API...
SpringMVC学习使用
一、SpringMVC简单理解 1.1 Spring与Web环境集成 1.1.1 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext(spring配置文件) 方式获取的,但是每次从容器中获得Bean时都要编写new ClasspathXmlApplicationContext(sp…...
MySQL | MySQL安装教程
MySQL | MySQL安装教程(压缩包(ZIP)安装-详细版) 🪄个人博客:https://vite.xingji.fun MySQL概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,MySQL AB公司被Sun公司收购,Sun公…...
Vite入门指南
一、什么是Vite? Vite(法语意为"快速")是由Vue作者尤雨溪开发的新型前端构建工具。它基于原生ES模块(ESM)实现,具有以下核心优势: 极速启动:冷启动时间比Webpack快10-10…...
DeepSeek 助力 Vue 开发:打造丝滑的进度条
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
左移架构 -- 从攒批,湖仓到使用数据流的实时数据产品
编辑导读: 这篇文章翻译自 Kai Waehner的 《The Shift Left Architecture – From Batch and Lakehouse to Real-Time Data Products with Data Streaming》。文章通过数据产品的概念引出了如何创建可重复使用的数据产品使企业能够从当前和未来的数据中获得价值。基于构建数据产…...
用java实现word(docx)转换为pdf格式文档(简单版)
导入依赖 <dependency> <groupId>com.documents4j</groupId> <artifactId>documents4j-local</artifactId> <version>1.0.3</version> </dependency> <dependency>…...
【云安全】云原生- K8S etcd 未授权访问
什么是etcd? etcd 是一个开源的分布式键值存储系统,主要用于存储和管理配置信息、状态数据以及服务发现信息。它采用 Raft 共识算法,确保数据的一致性和高可用性,能够在多个节点上运行,保证在部分节点故障时仍能继续提…...
【Elasticsearch】字符过滤器Character Filters
在 Elasticsearch 中,字符过滤器(Character Filters)是文本分析器的重要组成部分,用于在分词之前对原始文本进行预处理。它们可以对字符流进行转换,例如添加、删除或更改字符。Elasticsearch 提供了三种内置的字符过滤…...
网络工程师 (35)以太网通道
一、概念与原理 以太网通道,也称为以太端口捆绑、端口聚集或以太链路聚集,是一种将多个物理以太网端口组合成一个逻辑通道的技术。这一技术使得多个端口能够并行工作,共同承担数据传输任务,从而提高了网络的传输能力和可靠性。 二…...
浏览器网络请求全流程深度解析
一、核心流程概述 现代浏览器的网络请求过程是一个分层协作的精密系统,涉及应用层协议、传输层协议、操作系统内核及网络基础设施的协同工作。整个过程可抽象为以下关键阶段: 请求构建与初始化DNS解析与寻址TCP连接建立HTTP协议交互响应处理与资源解析…...
arduino扩展:Arduino Mega 控制 32 个舵机(参考表情机器人)
参考:表情机器人中使用22个舵机的案例 引言 在电子制作与自动化控制领域,Arduino 凭借其易用性和强大的扩展性备受青睐。Arduino Mega 作为其中功能较为强大的一款开发板,具备丰富的引脚资源,能够实现复杂的控制任务。舵机作为常…...
时间盲注,Boolean盲注
什么是SQL注入(SQL Injection) SQL注入是指攻击者通过构造恶意SQL语句来操控数据库,通常发生在Web应用程序未对用户输入进行充分验证的情况下。 什么是盲注(Blind SQL Injection) 盲注就是通过使用巧妙的SQL语句&am…...
小程序canvas2d实现横版全屏和竖版逐字的签名组件(字帖式米字格签名组件)
文章标题 01 功能说明02 效果预览2.1 横版2.2 竖版 03 使用方式04 横向签名组件源码4.1 html 代码4.2 业务 Js4.3 样式 Css 05 竖向签名组件源码5.1 布局 Html5.2 业务 Js5.3 样式 Css 01 功能说明 技术栈:uniapp、vue、canvas 2d 需求: 实现横版的全…...
wireshark网络抓包
由于图片和格式解析问题,可前往 阅读原文 到这里已经讲了两个抓包工具的使用了,大家应该对抓包不是很陌生了。而wireshark相对于fiddler和charles更加偏向于网络层面的抓包或者说是一个网络封包分析工具。使用对象更适合于网络相关人员(网络管理员/相关运…...
jenkins备份还原配置文件
下载ThinBackup插件 方式1 从插件市场直接下载 Manage Jenkins->Manage Plugins->可选插件搜索 注意:有时可能因为网络或者版本问题下载不了,好像是默认下载最新版本,可选择手动安装! 方式二 手动安装插件 点击查看手…...
C# 两种方案实现调用 DeepSeek API
目录 序 开发运行环境 访问API的一个通用方法 原生官网实现 申请 API key 调用实现 调用示例 腾讯云知识引擎原子调用 申请 API key 调用示例 小结 序 DeepSeek(深度求索) 最近可谓火爆的一塌糊涂,具体的介绍这里不再赘述&#x…...
Kimi杨植麟该为“重投放”反思吗?
Kimi原本验证的市场规律被撕裂了。 作者|文昌龙 编辑|杨舟 “没有人提杨植麟了,Kimi花了这么多钱买用户也买不过豆包,到头来都敌不过界面简陋、功能单一的DeepSeek。还是应该把精力和资源集中在做出更好的基础模型才是王道。” 这番话,来自…...
25农村发展研究生复试面试问题汇总 农村发展专业知识问题很全! 农村发展复试全流程攻略 农村发展考研复试真题汇总
农村发展复试当然有好的建议!前提是复试重点面试题背好! 你是不是也在为农村发展考研复试发愁?担心自己准备不充分、表现不好?别急!今天,学姐——复试面试拿下90分成功上岸的学姐,来给大家分享…...
JavaScript函数与方法详解
目录 一、函数的定义 1. 函数声明 2. 函数表达式 3. 箭头函数 二、函数的调用 1. 调用方式 2. 参数数量的灵活性 三、arguments 对象 1. 基本概念 2. 属性 3. 应用场景 4. 转换为真数组 5. 总结 四、Rest参数 1. 基本概念 2. 特点 3. 应用场景 4. 总结 五、变…...
AI 网关对决:Higress 与 OneAPI 的功能对比
什么是 AI 网关? AI 网关旨在统一管理与各种大型语言模型(LLMs)的交互。通过提供单一入口点,它解决了使用来自不同供应商的多个 AI 模型所带来的复杂性问题。这不仅简化了访问流程,提高了系统稳定性,还降低…...
封装一个sqlite3动态库
作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、项目案例 二…...
1.攻防世界 unserialize3(wakeup()魔术方法、反序列化工作原理)
进入题目页面如下 直接开审 <?php // 定义一个名为 xctf 的类 class xctf {// 声明一个公共属性 $flag,初始值为字符串 111public $flag 111;// 定义一个魔术方法 __wakeup()// 当对象被反序列化时,__wakeup() 方法会自动调用public function __wa…...
DeepSeek能做分析吗?从需求规约到分析类图的实验
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 今天我们来尝试DeepSeek能不能帮我们从需求转到分析。 给定一个用例规约,我们让它按照面向对象分析设计方法,出一个分析类图。过程如下: 可以帮助提…...
九.Spring Boot使用 ShardingSphere + MyBatis + Druid 进行分库分表
文章目录 前言一、引入依赖二、创建一个light-db_1备用数据库三、配置文件 application-dev.yml四、创建shardingsphere-config.yml完整项目结构 五、测试总结 前言 在现代化微服务架构中,随着数据量的不断增长,单一数据库已难以满足高可用性、扩展性和…...
RNN复兴!性能反超Transformer,训练速度提升1300倍!
在最新的顶会论文中,RNN的改进创新更是层出不穷。Bengio团队提出的minLSTM和minGRU,通过去除隐藏状态的依赖和简化门控机制,显著减少了参数量和计算量。这些模型可以使用并行扫描算法进行训练,大大加快了训练速度。例如࿰…...
C语言第18节:自定义类型——联合和枚举
1. 联合体 C语言中的联合体(Union)是一种数据结构,它允许在同一内存位置存储不同类型的数据。不同于结构体(struct),结构体的成员各自占有独立的内存空间,而联合体的所有成员共享同一块内存区域…...
2025年二级建造师报名流程图解
2025年二级建造师报名时间!附报名流程! ⏰️已公布25年二建考试时间的省份如下: ️4月19日、20日考试的城市有:贵州 ️5月10日、11日考试的城市有:湖北、陕西、宁夏、甘肃、福建、浙江、江西、黑龙江、河南、湖南、…...
AWTK fscript 中的 TCP/UDP 客户端扩展函数
fscript 是 AWTK 内置的脚本引擎,开发者可以在 UI XML 文件中直接嵌入 fscript 脚本,提高开发效率。本文介绍一下 fscript 中的 TCP/UDP 客户端扩展函数。 1.iostream_tcp_create 创建 TCP 客户端输入输出流对象。 原型 iostream_tcp_create(host, por…...
用php tp6对接钉钉审批流的 table 表格 明细控件 旧版sdk
核心代码 foreach ($flows[product_list] as $k>$gift) {$items_list[] [[name > 商品名称, value > $gift[product_name] ?? ],[name > 规格, value > $gift[product_name] ?? ],[name > 数量, value > $gift[quantity] ?? ],[name > 单位, v…...
【DuodooBMS】给PDF附件加“受控”水印的完整Python实现
给PDF附件加“受控”水印的完整Python实现 功能需求 在实际工作中,许多文件需要添加水印以标识其状态,例如“受控”“机密”等。对于PDF文件,添加水印不仅可以增强文件的可识别性,还可以防止未经授权的使用。本代码的功能需求是…...
前缀和算法篇:解决子数组累加和问题
前缀和算法篇:解决子数组累加和问题 1.前缀和原理 那么在介绍前缀和的原理之前,那么我们先来说下前缀和最基本的一个应用场景,那么就是如我们标题所说的子数组累加和问题,那么假设我们现在有一个区间为[L,R]的数组,那…...
大语言模型多代理协作(MACNET)
大语言模型多代理协作(MACNET) Scaling Large-Language-Model-based Multi-Agent Collaboration 提出多智能体协作网络(MACNET),以探究多智能体协作中增加智能体数量是否存在类似神经缩放定律的规律。研究发现了小世界协作现象和协作缩放定律,为LLM系统资源预测和优化…...
vue项目使用vite和vue-router实现history路由模式空白页以及404问题
开发项目的时候,我们一般都会使用路由,但是使用hash路由还是history路由成为了两种选择,因为hash路由在url中带有#号,history没有带#号,看起来更加自然美观。但是hash速度更快而且更通用,history需要配置很…...
【Linux】从一台windows电脑访问局域网下另一台linux电脑详细操作步骤
以下是在Windows电脑B上访问Linux电脑A的文件并使用bash终端的详细步骤: 一、在Linux电脑A上配置SSH服务(用于终端操作) 安装SSH服务 sudo apt update && sudo apt install openssh-server启动SSH服务并设置开机自启 sudo systemctl …...
Makefile的用法及算法应用
编译的过程 算法:解决特定问题的求解步骤 算法的设计 1.正确性 语法正确合法的输入能得到合理的结果对非法的输入,给出满足要求的规格说明对精心选择,甚至刁难的测试都能正常运行,结果正确 2.可读性,便于交流&…...
Elasticsearch:15 年来致力于索引一切,找到重要内容
作者:来自 Elastic Shay Banon 及 Philipp Krenn Elasticsearch 刚刚 15 岁了!回顾过去 15 年的索引和搜索,并展望未来 15 年的相关内容。 Elasticsearch 刚刚成立 15 周年。一切始于 2010 年 2 月的一篇公告博客文章(带有标志性的…...
MongoDB 扩缩容实战:涵盖节点配置、服务启动与移除操作
#作者:任少近 文章目录 一、扩容在245节点上配置配置config server:配置mongos启动config server安装工具mongosh添加245新节点到副本集配置分片副本集启动路由并分片 二、缩容Conf server上去掉server4shard上去掉server4mongos上去掉server4 一、扩容…...
Bitmap在数仓中的应用
一、背景 在数据仓库的日常工作中,我们经常需要面对海量数据的存储和高效查询问题。尤其是,当业务对性能的要求越来越高、数据量持续增长时,传统的处理方式往往显得笨拙而低效。而这时候,Bitmap(位图)作为…...
C++病毒(^_^|)(2)
第二期 声明: 仅供损害电脑,不得用于非法。损坏电脑,作者一律不负责。此作为作者原创,转载请经过同意。 直接上代码 #include <bits/stdc.h> #include <windows.h> using namespace std; HHOOK g_hHook;void lrud(…...
Linux 内核架构入门:从基础概念到面试指南*
1. 引言 Linux 内核是现代操作系统的核心,负责管理硬件资源、提供系统调用、处理进程调度等功能。对于初学者来说,理解 Linux 内核的架构是深入操作系统开发的第一步。本篇博文将详细介绍 Linux 内核的架构体系,结合硬件、子系统及软件支持的…...
leetcode-495.提莫攻击
leetcode-495.提莫攻击 文章目录 leetcode-495.提莫攻击一.题目描述二.代码提交三.解释 一.题目描述 二.代码提交 #include <vector> using namespace std;int findPoisonedDuration(vector<int>& timeSeries, int duration) {int total 0;for (int i 0; i …...
mysql 参数max_connect_errors研究
1.在server端设置max_connect_errors3,超过3次连接错误就block mysql> set global max_connect_errors3; Query OK, 0 rows affected (0.00 sec) mysql> show variables like max_connect_errors; --------------------------- | Variable_name | Value…...