【优选算法-滑动窗口】长度最小的子数组、无重复字符的最长子串、最大连续1的个数、将x减为0的最小操作数、水果成篮
一、长度最小的子数组
题目链接:
209. 长度最小的子数组 - 力扣(LeetCode)
题目介绍:
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其总和大于等于 target
的长度最小的 子数组
[numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
思路1:暴力枚举
每次固定一个起始下标,往后遍历求和,直到大于target停止,并更新最小长度
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {// 记录结果int ret = INT_MAX;int n = nums.size();// 枚举出所有满⾜和⼤于等于 target 的⼦数组[start, end]// 由于是取到最⼩,因此枚举的过程中要尽量让数组的⻓度最⼩// 枚举开始位置for (int start = 0; start < n; start++) {int sum = 0; // 记录从这个位置开始的连续数组的和// 寻找结束位置for (int end = start; end < n; end++) {sum += nums[end]; // 将当前位置加上if (sum >= target) // 当这段区间内的和满⾜条件时{// 更新结果,start 开头的最短区间已经找到ret = min(ret, end - start + 1);break;}}}// 返回最后结果return ret == INT_MAX ? 0 : ret;}
};
思路2:对思路1进行优化(滑动窗口)
思路1在从一个下标开始,计算完后,sum会重新归为0,从下一个下标开始重新计算求和,但是这里有一个问题,第一次求和与第二次求和只相差了一个元素的值,如果直接从头开始,就会产生重重复的计算,所以每当我们从一个下标计算完最小长度后,可以利用单调性,不让sum归0,也不改变end了,直接让sum -= nums[start] ,然后让start++,这样就可以继续向后计算了,但是要注意的是,最左边的值可能是一个很小的值,甚至,sum减去它以后还是满足大于target的,所以这里不能用if判断,而是用一个while循环。
这样在一个连续空间上,两个指针同向移动就叫做滑动窗口
时间复杂度:虽然代码是两层循环,但是我们的 left 指针和 right 指针都是不回退的,两者最多都往后移动 n 次。因此时间复杂度是 O(N) 。
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int minlen=INT_MAX;int sum=0;for(int left=0,right=0;right<nums.size();right++){sum+=nums[right];while(sum>=target){minlen=min(minlen,right-left+1);sum-=nums[left];left++;}}return minlen==INT_MAX?0:minlen;;}
};
二、无重复字符的最长子串
题目链接:
3. 无重复字符的最长子串 - 力扣(LeetCode)
题目介绍:
给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
0 <= s.length <= 5 * 104
s
由英文字母、数字、符号和空格组成
思路1:暴力枚举
依旧是从一个下标开始遍历,判断是否出现重复字符串可以利用哈希表,当hash[n]>1时就说明有重复字符了
class Solution {
public:int lengthOfLongestSubstring(string s) {int ret = 0; // 记录结果int n = s.length();// 1. 枚举从不同位置开始的最⻓重复⼦串// 枚举起始位置for (int i = 0; i < n; i++) {// 创建⼀个哈希表,统计频次int hash[128] = {0};// 寻找结束为⽌for (int j = i; j < n; j++) {hash[s[j]]++; // 统计字符出现的频次if (hash[s[j]] > 1) // 如果出现重复的break;// 如果没有重复,就更新 retret = max(ret, j - i + 1);}}// 2. 返回结果return ret;}
};
思路2:滑动窗口
研究的对象依旧是⼀段连续的区间,因此继续使用「滑动窗口」思想来优化。
让滑动窗口满足:窗口内所有元素都是不重复的。 做法:
右端元素 ch 进⼊窗口的时候,哈希表统计这个字符的频次:
- 如果这个字符出现的频次超过 1 ,说明窗口内有重复元素,那么就从左侧开始划出窗口, 直到 ch 这个元素的频次变为 1 ,然后再更新结果。
- 如果没有超过1 ,说明当前窗口没有重复元素,可以直接更新结果
class Solution {
public:int lengthOfLongestSubstring(string s) {int hash[128] = {0};int maxlen = 0;for (int left = 0, right = 0; right < s.size(); right++) {hash[s[right]]++;while (hash[s[right]] > 1) {hash[s[left]]--;left++;}maxlen = max(maxlen, right - left + 1);}return maxlen;}
};
三、最大连续 1 的个数 III
题目链接:
1004. 最大连续1的个数 III - 力扣(LeetCode)
题目介绍:
给定一个二进制数组 nums
和一个整数 k
,假设最多可以翻转 k
个 0
,则返回执行操作后 数组中连续 1
的最大个数 。
思路:
不用想着翻转元素,这样反而会把题目搞复杂,转变一下思路,这个题目就是找一个0的个数不大于k个的连续区间的最大长度,同样的在一段连续区间上操作,可以采用滑动窗口。
定义一个变量num用于记录窗口中0的个数,每次让nums[right]入窗口,如果他的值是0的话,就让num++,如果num>k,就从左边出窗口,直到 num <= k,再更新结果;如果入窗口后,num还是小于k的,说明这段区间是符合要求的,可以直接更新结果
class Solution {
public:int longestOnes(vector<int>& nums, int k) {int num=0;int maxlen=INT_MIN;for(int left=0,right=0;right<nums.size();right++){if(nums[right]==0)num++;while(num>k){if(nums[left]==0){left++;num--;}else{left++;}}maxlen=max(maxlen,right-left+1);}return maxlen;}
};
四、将 x 减到 0 的最小操作数
题目链接:
1658. 将 x 减到 0 的最小操作数 - 力扣(LeetCode)
题目介绍:
给你一个整数数组 nums
和一个整数 x
。每一次操作时,你应当移除数组 nums
最左边或最右边的元素,然后从 x
中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。
如果可以将 x
恰好 减到 0
,返回 最小操作数 ;否则,返回 -1
。
1 <= nums.length <= 105
1 <= nums[i] <= 104
1 <= x <= 109
思路:
这个题目如果从正面想的话比较复杂,因为它是从数组两边进行操作的,所以我们可以转变一下思路,将这个题变为找一段最长连续区间的和=sum - x,这样最小操作数就是数组的长度减去这个连续区间的长度了。
首先计算出数组的和,然后求出sum-x,如果target的值都小于0了,就返回1,因为数组中的元素都是大于0的。
接下来就可以让right入窗口了,如果和大于target的话,就出窗口,直到和小于等于target,要注意更新结果要有一个判断条件,就是 sum=target
class Solution {
public:int minOperations(vector<int>& nums, int x) {//转变思路,求一段连续空间中和为sum-x的长度int sum=0;for(auto& e: nums){sum+=e;}int target=sum-x;if(target<0)return -1;int maxlen=-1;sum=0;for(int left=0,right=0;right<nums.size();right++){sum+=nums[right];while(sum>target){sum-=nums[left++];}if(sum==target)maxlen=max(maxlen,right-left+1);}if(maxlen==-1)return -1;elsereturn nums.size()-maxlen;}
};
五、水果成篮
题目链接:
904. 水果成篮 - 力扣(LeetCode)
题目介绍:
你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits
表示,其中 fruits[i]
是第 i
棵树上的水果 种类 。
你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:
- 你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。
- 你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。
- 一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。
给你一个整数数组 fruits
,返回你可以收集的水果的 最大 数目。
思路:
这个题目依旧是操作一个连续的空间,也要遍历,所以可以采用滑动窗口,让滑动窗口维护只有两类水果。
当一个水果入窗口后,可以将他的种类用哈希表维护起来,这样当一个新水果进来后,哈希表的长度就会加1,如果哈西表的长度大于2的话,说明窗口中存在第三种水果了,那就从左边出窗口,直到哈希表的长度小于2
class Solution {
public:int totalFruit(vector<int>& fruits) {unordered_map<int,int> m;int num=0;for(int left=0,right=0;right<fruits.size();right++){m[fruits[right]]++;while(m.size()>2){m[fruits[left]]--;if(m[fruits[left]]==0)m.erase(fruits[left]);left++;}num=max(num,right-left+1);}return num;}
};
相关文章:
【优选算法-滑动窗口】长度最小的子数组、无重复字符的最长子串、最大连续1的个数、将x减为0的最小操作数、水果成篮
一、长度最小的子数组 题目链接: 209. 长度最小的子数组 - 力扣(LeetCode) 题目介绍: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, .…...
在Spring Boot项目中整合Redis:高效数据存储与缓存的最佳实践
目录 1. 引入依赖 2. 创建序列化配置类 2.1 序列化的选择 3. 配置YAML文件 3.1 连接池的配置 4. 使用Redis 4.1 复杂数据类型的存储 4.2 列表、集合和哈希的使用 4.2.1 列表示例 4.2.2 集合示例 4.2.3 哈希示例 5. 处理事务和管道 5.1 事务示例 5.2 管道示例 6…...
什么是自动化办公
自动化办公是指使用技术工具或软件,通过预设流程或脚本,自动执行日常办公任务,从而提升效率、减少错误、节约时间的办公模式。它适用于需要重复性、规则明确的工作流程,让员工将精力集中在更具创造性和战略性的工作上。 自动化办公…...
搜索引擎是如何理解你的查询并提供精准结果的?
目录 一、搜索引擎简单介绍 二、搜索引擎整体架构和工作过程 (一)整体分析 (二)爬虫系统 三个基本点 爬虫系统的工作流程 关键考虑因素和挑战 (三)索引系统 网页处理阶段 预处理阶段 反作弊分析…...
国内外网络安全政策动态(2024年11月)
▶︎ 1.13项网络安全国家标准自11月1日起实施 11月1日起,《网络安全技术 信息技术安全评估准则》等13项网络安全国家标准开始实施,其中,《网络安全技术 信息技术安全评估准则 第1-5部分》《网络安全技术 信息技术安全评估方法》等6项推荐性国…...
服务器---centos上前端从0到1配置项目部署
在进行前端开发时,我们经常会面临将项目部署到服务器上的需求。为了更好地管理和保护我们的前端应用,我们通常会使用反向代理来实现对后端服务的访问。而对于使用CentOS系统的开发者来说,Nginx就是一个非常强大且可靠的工具。 在本文中,我们将探讨如何在CentOS系统上配置Ng…...
【前端】深入解析 JavaScript 中的 instanceof 运算符与 number 数据类型 和 Number 对象 区别辨析
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯理论基础:instanceof 运算符的设计初衷与核心功能基础定义与应用示例解析代码分解 💯typeof 与 instanceof:两种类型检测方法的语义与…...
为什么类 UNIX 操作系统通常内置编译器?为什么 Windows 更倾向于直接使用二进制文件?
操作系统是否内置编译器,取决于该系统的设计目标、用户群体以及常见的使用场景。以下是内置编译器和直接使用二进制的设计理念和原因的分析: 为什么类 UNIX 操作系统通常内置编译器? 面向开发者的需求: 类 UNIX 系统(如…...
Ubuntu安装grafana
需求背景:管理服务器,并在线预警,通知 需求目的: 及时获取服务器状态 技能要求: 1、ubuntu 2、grafana 3、prometheus 4、node 步骤: 一、grafana安装 1、准备系统环境,配置号网络 2、…...
Java阶段三06
第3章-第6节 一、知识点 理解MVC三层模型、理解什么是SpringMVC、理解SpringMVC的工作流程、了解springMVC和Struts2的区别、学会使用SpringMVC封装不同请求、接收参数 二、目标 理解MVC三层模型 理解什么是SpringMVC 理解SpringMVC的工作流程 学会使用SpringMVC封装请求…...
C# .NET CORE 开发问题汇总
1. error MSB4803: .NET Core 版本的 MSBuild 不支持“ResolveComReference”。请使用 .NET Framework 版本的 MSBuild。 引用了一个COM组件, 使用donet 命令时,提示不支持, 可以先将项目设置为x86以构建, 将COM引用添加到核心项目中,构建它,在obj\x86\…...
短视频矩阵搭建/源码部署揭秘
短视频矩阵源码开发部署涉及使用开源技术构建和配置短视频平台。这一过程涵盖了从前端界面设计到后端逻辑处理,再到视频内容的存储管理的多个方面。以下是对关键技术的详细分析: 前端技术:为了提供流畅且互动性强的用户界面,短视…...
SpringBoot配置文件
文章目录 基本语法数据类型写法举例行内写法级联写法 配置提示用法举例逗号分隔默认值单个值集合值 映射到类 注意事项引用 基本语法 key: value形式,kv之间有空格大小写敏感使用缩进表示层级关系,缩进不允许使用tab,只允许空格。缩进的空格…...
[漏洞挖掘与防护] 05.CVE-2018-12613:phpMyAdmin 4.8.1后台文件包含缺陷复现及防御措施
这是作者新开的一个专栏——“漏洞挖掘与防护”,前期会复现各种经典和最新漏洞,并总结防护技巧;后期尝试从零学习漏洞挖掘技术,包括Web漏洞和二进制及IOT相关漏洞,以及Fuzzing技术。新的征程,新的开启,漫漫长征路,偏向虎山行。享受过程,感谢您的陪伴,一起加油~ 欢迎关…...
第四十七篇 Vision Transformer(VIT)模型解析
ViT(Vision Transformer)模型是一种基于Transformer架构的视觉模型,它成功地将Transformer从自然语言处理(NLP)领域引入到计算机视觉(CV)领域,专门用于处理图像数据。以下是对ViT模型…...
Redis篇-4--原理篇3--Redis发布/订阅(Pub/Sub)
1、概述 Redis 发布/订阅(Publish/Subscribe,简称 Pub/Sub)是一种消息传递模式,允许客户端订阅一个或多个通道(channel),并接收其他客户端发布到这些通道的消息。 2、Redis 发布/订阅的主要概…...
Spring Boot 3 中Bean的配置和实例化详解
一、引言 在Java企业级开发领域,Spring Boot凭借其简洁、快速、高效的特点,迅速成为了众多开发者的首选框架。Spring Boot通过自动配置、起步依赖等特性,极大地简化了Spring应用的搭建和开发过程。而在Spring Boot的众多核心特性中ÿ…...
一文理解 “Bootstrap“ 在统计学背景下的含义
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一文理解 “Bootstrap“ 在统计学背景下的含义 类比:重新抽样 假设我参加了班级的考试,每位同学都获得了一个成绩。现在,我想了解整个班级的平均成绩,但…...
多媒体文件解复用(Demuxing)过程
多媒体文件的解复用(Demuxing)过程指的是从一个多媒体容器文件(如 MP4、MKV、AVI 等)中提取不同类型的多媒体数据流(例如视频流、音频流、字幕流等)的过程。 容器文件本身并不包含实际的视频或音频数据&…...
ARINC 标准全解析:航空电子领域多系列标准的核心内容、应用与重要意义
ARINC标准概述 ARINC标准是航空电子领域一系列重要的标准规范,由航空电子工程委员会(AEEC)编制,众多航空公司等参与支持。这些标准涵盖了从飞机设备安装、数据传输到航空电子设备功能等众多方面,确保航空电子系统的兼…...
开源架构安全深度解析:挑战、措施与未来
开源架构安全深度解析:挑战、措施与未来 一、引言二、开源架构面临的安全挑战(一)代码漏洞 —— 隐藏的定时炸弹(二)依赖项安全 —— 牵一发而动全身(三)社区安全 —— 开放中的潜在危机 三、开…...
Python装饰器设计模式:为函数增添风味
Python装饰器设计模式:为函数增添风味 什么是装饰器?为什么需要装饰器?如何使用装饰器?示例1:简单的装饰器示例2:带参数的装饰器 装饰器的使用场景总结 大家好,今天我们要学习一个非常有趣的Pyt…...
Vue.js的生命周期
Vue.js 是一个构建用户界面的渐进式框架,它提供了一个响应式和组件化的方式来构建前端应用。了解 Vue 的生命周期对于开发者来说至关重要,因为它可以帮助我们更好地控制组件的状态和行为。本文将详细介绍 Vue 的生命周期,并提供相应的代码示例…...
【数据库】关系代数和SQL语句
一 对于教学数据库的三个基本表 学生S(S#,SNAME,AGE,SEX) 学习SC(S#,C#,GRADE) 课程(C#,CNAME,TEACHER) (1)试用关系代数表达式和SQL语句表示:检索WANG同学不学的课程号 select C# from C where C# not in(select C# from SCwhere S# in…...
Pytest测试用例使用小结
基础使用 Pytest 测试用例实现代码 import pytest from server.service import Servicepytest.fixture def service():return Service(logger)class TestService:classmethoddef setup_class(cls):"""初始化设置一次:return:"""logger.info(&q…...
KV Shifting Attention Enhances Language Modeling
基本信息 📝 原文链接: https://arxiv.org/abs/2411.19574👥 作者: Mingyu Xu, Wei Cheng, Bingning Wang, Weipeng Chen🏷️ 关键词: KV shifting attention, induction heads, language modeling📚 分类: 机器学习, 自然语言处…...
从 Zuul 迁移到 Spring Cloud Gateway:一步步实现服务网关的升级
从 Zuul 迁移到 Spring Cloud Gateway:一步步实现服务网关的升级 迁移前的准备工作迁移步骤详解第一步:查看源码第二步:启动类迁移第三步:引入 Gateway 依赖第四步 编写bootstrap.yaml第五步:替换路由配置第六步&#…...
推荐几款国外AI音频工具
【加拿大】Resemble AI - 提供AI驱动的语音合成 【加拿大】Resemble AI - 提供AI驱动的语音合成和克隆工具 Resemble,AI提供AI驱动的语音合成和克隆工具,帮助用户高效生成和处理语音内容,其语音合成功能可以自动生成自然流畅的语音,提升音频项目的表现力,Resemble,AI的语音克…...
导入excel动态生成海报
需求:给出一份excel表格(1000条数据),要将表格中的字段数据渲染到一张背景图片上,然后再下载图片,貌似浏览器做了限制,当连续下载10张图片后就不在下载了,然后用异步操作解决了这个问题。 // e…...
Unity 使用LineRenderer制作模拟2d绳子
效果展示: 实现如下: 首先,直接上代码: using System.Collections; using System.Collections.Generic; using UnityEngine;public class LineFourRender : MonoBehaviour {public Transform StartNode;public Transform MidNod…...
Android启动优化指南
文章目录 前言一、启动分类与优化目标1、冷启动1.1 优化思路1.2 延迟初始化与按需加载1.3 并行加载与异步执行1.4 资源优化与懒加载1.5 内存优化与垃圾回收控制 2. 温启动2.1 优化应用的生命周期管理2.2 数据缓存与懒加载2.3 延迟渲染与视图优化 3. 热启动3.1 保持应用的状态3.…...
每日一练 | 华为 eSight 创建的缺省角色
01 真题题目 下列选项中,不属于华为 eSight 创建的缺省角色的是: A. Administrator B. Monitor C. Operator D. End-User 02 真题答案 D 03 答案解析 华为 eSight 是一款综合性的网络管理平台,提供了多种管理和监控功能。 为了确保不同用…...
ubuntu 手动更换库文件解决nvcc -V和nvidia-smi不一致
NVML 库版本与驱动不匹配 问题现象问题排查限制解决禁止自动更新降低库版本 问题现象 笔主在训练之前想查看gpu占用情况,使用watch -n 1 nvidia-smi发现: 且在推理、训练时无法使用到显卡。 问题排查 cat /proc/driver/nvidia/version查看当前显卡驱…...
DataSophon集成CMAK KafkaManager
本次集成基于DDP1.2.1 集成CMAK-3.0.0.6 设计的json和tar包我放网盘了. 通过网盘分享的文件:DDP集成CMAK 链接: https://pan.baidu.com/s/1BR70Ajj9FxvjBlsOX4Ivhw?pwdcpmc 提取码: cpmc CMAK github上提供了zip压缩包.将压缩包解压之后 在根目录下加入启动脚本…...
2024-2025关于华为ICT大赛考试平台常见问题
一、考生考试流程 第一步:收到正式考试链接后点击考试链接并登录; 第二步:请仔细阅读诚信考试公约,阅读完成后勾选“我已阅读”,并点击确定; 第三步:上传身份证人像面进行考前校验࿰…...
Halcon中lines_gauss(Operator)算子原理及应用详解
在Halcon图像处理库中,lines_gauss算子是一个用于检测图像中线条的强大工具,它能够提供亚像素精度的线条轮廓。以下是对lines_gauss (ImageReducedTracks, Lines, 1.5, 1, 8, ‘light’, ‘true’, ‘bar-shaped’, ‘true’)算子的详细解释:…...
Flink集群搭建整合Yarn运行
Flink 集群 1. 服务器规划 服务器h1、h4、h5 2. StandAlone 模式(不推荐) 2.1 会话模式 在h1操作 #1、解压 tar -zxvf flink-1.19.1-bin-scala_2.12.tgz -C /app/#2、修改配置文件 cd /app/flink-1.19.1/conf vim conf.yaml ##内容:## j…...
FPGA工作原理、架构及底层资源
FPGA工作原理、架构及底层资源 文章目录 FPGA工作原理、架构及底层资源前言一、FPGA工作原理二、FPGA架构及底层资源 1.FPGA架构2.FPGA底层资源 2.1可编程输入/输出单元简称(IOB)2.2可配置逻辑块2.3丰富的布线资源2.4数字时钟管理模块(DCM)2.5嵌入式块 …...
Postman的使用
(一)创建Collections:Collections->New Collection->创建界面填入Collection名称,比如某个系统/模块名,描述里可以稍微更详细的介绍集合的信息 Collection创建时,还可以定义Authorization 如下&#…...
【报错】新建springboot项目时缺少resource
1.问题描述 在新建springboot项目时缺少resources,刚刚新建时的目录刚好就是去掉涂鸦的resources后的目录 2.解决方法 步骤如下:【文件】--【项目结构】--【模块】--【源】--在main文件夹右击选择新建文件夹并命名为resources--在test文件夹右击选择新建文件夹并命名…...
phpstudy访问本地localhost无目录解决办法
phpstudy访问本地localhost无目录解决办法 错误: 直接访问本地http://localhost/,出现hello word,或者直接报错,无法出现本地目录 解决办法: 对于Phpstudy-2018版本来说: 找到这里的Phpstudy设置 2. 打…...
架构16-向微服务迈进
零、文章目录 架构16-向微服务迈进 1、向微服务迈进 (1)软件开发中的“银弹”概念 **背景:**软件开发过程中常常出现工期延误、预算超支、产品质量低劣等问题,这使得管理者、程序员和用户都渴望找到一种能够显著降低成本的“银…...
基于Springboot汽车资讯网站【附源码】
基于Springboot汽车资讯网站 效果如下: 系统主页面 汽车信息页面 系统登陆页面 汽车信息推荐页面 经销商页面 留言反馈页面 用户管理页面 汽车信息页面 研究背景 随着信息技术的快速发展和互联网的普及,互联网已成为人们查找信息的重要场所。汽车资讯…...
Tomcat项目本地部署
今天分享一下如何在本地,不依赖于idea部署聚合项目,以我做过的哈米音乐项目为例,项目结构如下: ham-core模块为公共模块,我们只需将另外三个模块:前台、后台、文件服务器打包,将打好的jar、war包…...
【OpenCV】直方图
理论 可以将直方图视为图形或曲线图,从而使您对图像的强度分布有一个整体的了解。它是在X轴上具有像素值(不总是从0到255的范围),在Y轴上具有图像中相应像素数的图。 这只是理解图像的另一种方式。通过查看图像的直方图,您可以直观地了解该…...
pika:适用于大数据量持久化的类redis组件|jedis集成pika(二)
文章目录 0. 引言1. pika客户端支持2. jedis集成pika3. pika性能测试 0. 引言 上节我们讲解了pika的搭建,这节我们来看下如何在java项目中利用jedis集成pika 1. pika客户端支持 pika支持的客户端与redis完全一致,所以理论上redis支持的客户端pika也都…...
Linux 进程间通信
Linux进程间通信 进程间通信(IPC,Inter-Process Communication)在 Linux 下常用的方法包括: 1)管道(Pipe) 2)有名管道(FIFO) 3)消息队列&#x…...
【C++】快速排序详解与优化
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯快速排序的核心思想1. 算法原理2. 算法复杂度分析时间复杂度空间复杂度 💯快速排序的代码实现与解析代码实现代码解析1. 递归终止条件2. 动态分配子数组3. 分区…...
【JAVA高级篇教学】第二篇:使用 Redisson 实现高效限流机制
在高并发系统中,限流是一项非常重要的技术手段,用于保护后端服务,防止因流量过大导致系统崩溃。本文将详细介绍如何使用 Redisson 提供的 RRateLimiter 实现分布式限流,以及其原理、使用场景和完整代码示例。 目录 一、什么是限流…...
NanoLog起步笔记-1
nonolog起步笔记-1 背景与上下文写在前面Nanolog与一般的实时log的异同现代log的一般特性Nanolog的选择 背景与上下文 因为工作中用到了NanoLog。有必要研究一下。 前段时间研究了许多内容,以为写了比较详实的笔记,今天找了找,不仅笔记没找到…...