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

[dp16_两个数组] 通配符匹配 | 交错字符串 | 两个字符串的最小ASCII删除和

目录

1.通配符匹配

题解

2.交错字符串

题解

3.两个字符串的最小ASCII删除和


1.通配符匹配

链接:44. 通配符匹配

给你一个输入字符串 (s) 和一个字符模式 (p) ,请你实现一个支持 '?''*' 匹配规则的通配符匹配:

  • '?' 可以匹配任何单个字符。
  • '*' 可以匹配任意字符序列(包括空字符序列)。

判定匹配成功的充要条件是:字符模式必须能够 完全匹配 输入字符串(而不是部分匹配)。

示例 1:

输入:s = "aa", p = "a"
输出:false
解释:"a" 无法匹配 "aa" 整个字符串。

示例 2:

输入:s = "aa", p = "*"
输出:true
解释:'*' 可以匹配任意字符串。

题解

1.状态表示

  • 经验 + 题目要求
  • dp[i][j] 表示: s[0, i] 区间内的子串能否 被 p[0, j] 区间内的子串匹配

2.状态转移方程

  • 根据最后一个位置的状况,分情况讨论
  • p[j]是普通字符,如果 s[i]==p[j],并且 s [0, i - 1]能被 p[0, j -1] 匹配上,那 [0, i] 就能被 [0, j] 匹配上

特殊处理

  • p[j] == ‘?’ ,'?'可以匹配任何单个字符,因此只用去看s [0, i - 1]能否被 p[0, j -1] 匹配上

关于*号的处理:

  • p[j] == ’ * ',( ’ * ’ 可以匹配任意字符序列(包括空字符序列)。)
    如果p[j]匹配空串,我们就看dp[i][j-1]

如果p[j]匹配1个字符,我们就看dp[i-1][j-1]

如果p[j]匹配2个字符,我们就看dp[i-2][j-1]

  • 多种情况之间 是 || 的关系

dp[i][j] 时间复杂度就是O(N^2),在加上p[j] == ’ * ',时间复杂度就是O(N^3)了。

想个办法看看p[j] == ’ * ',能否由若干个有限的状态表示。

优化:
第一种方法:数学

  • p[j] == ‘*’,有这么多种情况,只要有一种情况为真就可以了
  • 所以我们可以得到下面的等式。发现 j -1是不变的,让等式所有 i 都减1。
  • 然后就可以进行替换了。

第二种方法:根据状态表示以及实际情况,优化状态转移方程

  • p[j] == ‘*’,找到dp[i][j]。
  • 当j位置是 ‘*’,第一种情况还是去匹配空串。
  • 第二种情况,去匹配一个字符 ,但是匹配完,不把 j 位置丢掉,继续去看 s[0, i -1] 能否被 p[0, j]匹配

可能会有疑问,为什么’ * ‘就匹配一个,明明可以匹配多个,并且匹配完为什么不把’ * '丢掉。

  • 利用 * 号的 传递性

我们这里是对 p[j] == ’ * ’ 好多情况的优化,我们让p[j] == ’ * ‘只匹配一个,但不舍去得到的 dp[i-1][j],也就是说在dp[i-1][j] 这一个状态里面,j位置 依旧是’ * ',它依旧有两种情况,要么去匹配空串,要么i-1匹配上,然后去dp[i-2][j]考虑匹配2个字符的情况。

  • 同理在dp[i-3][j]考虑匹配3个字符的情况。
  • 也就是说这个 j 会向下传递直到把s[0,i]所有字符匹配。
  • 也就是说当匹配一个,不丢弃的话,进入dp[i-1][j],’ * ’ 继续会把 i -1匹配掉。

同理进入dp[i-2][j],’ * ’ 继续会把 i -2匹配掉。所有仅需匹配一个不丢弃就可以把所有情况都考虑掉。

3.初始化

  1. 引入空串
  2. 里面的值要保证后序的填表是正确的
  3. 下标的映射关系

dp表上面多加一行表示s是空串,左边多加一列表示p是空串。接下来看看里面值应该填什么。

  • s 是空串,p也是空串,肯定能匹配上,所以第一行第一个格子是true
  • 当s 是空串,但是 p 不是空串的话,注意 ’ * ‘ 可以匹配空串。现在就要对p的字符串就行讨论
  • 然后初始化第一行后面的位置,如果s是空字符串,p字符串 前面出现’ * ‘ 可以匹配空串,但是 ’ * ‘ 之后出现普通字符了,后面不管有多少个’ * '都不能匹配了。
     

现在考虑第一列,如果p是空串,s也是空串,肯定能匹配,所以第一列第一个空格还是true。

后续如果 p 是空串,s不是空串,肯定匹配不上,所以第一列后续都是false

下标映射有两种方法:

  1. dp表多加一行一列整体向右下移动一位,如果要回原表需要 i -1,j -1 才行
  2. s = ’ ‘ + s,字符串前面加一个辅助字符,这样字符串字符就和dp表一一对应了。

4.填表顺序

  • 从上往下填写每一行,每一行从左往右
  • 左上角 开始

5.返回值

  • dp[i][j] 表示: s[0, i] 区间内的子串能否 被 p[0, j] 区间内的子串匹配
  • 题目要求是整个字符串,因此返回dp[m][n],m是s的长度,n是p的长度
class Solution {
public:bool isMatch(string s, string p) {int m=s.size(),n=p.size();vector<vector<bool>> dp(m+1,vector<bool>(n+1,false));dp[0][0]=true;  //都为空串时//!!!初始化字符串s=' '+s;p=' '+p;for(int i=1;i<=n;i++){if(p[i]!='*'){dp[0][i]=false;}else dp[0][i]=dp[0][i-1];}for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(p[j]>='a' && p[j]<='z'){if(s[i]==p[j] && dp[i-1][j-1])dp[i][j]=true;}if(p[j]=='?' && dp[i-1][j-1])dp[i][j]=true;if(p[j]=='*')//!!!dp[i][j]=dp[i][j-1] || dp[i-1][j];//空串 或者 抵消一个//填表的巧妙设计}}return dp[m][n];}
};

注意

一定要记得↓


2.交错字符串

链接:97. 交错字符串

给定三个字符串 s1s2s3,请你帮忙验证 s3 是否是由 s1s2 交错 组成的。

两个字符串 st 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:

  • s = s1 + s2 + ... + sn
  • t = t1 + t2 + ... + tm
  • |n - m| <= 1
  • 交错s1 + t1 + s2 + t2 + s3 + t3 + ... 或者 t1 + s1 + t2 + s2 + t3 + s3 + ...

注意:a + b 意味着字符串 ab 连接。

示例 1:

输入:s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出:true

示例 2:

输入:s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出:false

示例 3:

输入:s1 = "", s2 = "", s3 = ""
输出:true

单看叙述很难理解,接下来我们借用例子理解一下。

  • 这道题的意思是我们可以把字符串拆成若干份,然后把若干份拼接成s3。
  • 比如上面先把s1拆分为aa,s2拆分成dbbc,在把s1剩余拆分为bc,在把s2剩余拆分a,在把s1剩余拆分为c。就能拼接成s3.

注意空串是有意义的。

题解

  • 之前做的字符串问题最多也就是两个字符串,但这道题出现了三个字符串,分别是s1、s2、s3。
  • 那之前的经验还能用吗?我们之前的经验是在两个字符串里面各选一段区间作为研究对象来研究问题。

这三个字符串怎么办呢?其实我们依旧可以这个经验。

我们选取s1、s2区间之后我们想把两个区间拼接形成s3。

  • 我们其实已经知道s1字符串长度,s2字符串长度了,那s3字符串长度其实也就固定了。
  • 也就是说当我们选取s1区间、s2区间,s3区间就已经被确定了。
  • 因此也可以用之前的经验 + 题目要求,来定义状态表示。

这里我们预处理一下(s=' '+s),让字符串下标从1开始,这样等下下标对应就会非常简单。

1.状态表示

经验 + 题目要求

dp[i][j] 表示:s1中 [1,i] 区间内字符串以及 s2中 [1,j] 区间内字符串,能否拼接凑成 s3 [1,i+j]区间内的字符串

2. 状态转移方程

  • 根据最后一个位置的状况,分情况讨论
  • 最后一个位置我们来看看这个s3,如果s1、s2能够交错拼成s3,那s3最后 i+j 位置元素, 要么等于 s1 最后 i 位置元素,要么等于 s2 最后 j 位置元素。要么都不相等。如果都不相等那就不用管了,创建dp时就已经处理了 。我们只研究能匹配的情况。
  • 如果s1[i] == s3[i+j],我们还需要去看 s1[1,i-1] 和 s2[1,j] 区间能否拼接s3[1, i+j-1],正好是dp[i-1][j]

如果s2[j] == s3[i+j],和上面一样

  • 其实对于S3,就是要么选择S1要么选择S2
  • 动态规划 实现选不选

3.初始化

  1. 引入空串
  2. 里面的值要保证后序的填表是正确的
  3. 下标的映射关系

dp表上面多加一行表示s1是空串,左边多加一列表示s2是空串。接下来看看里面值应该填什么。

s1是空串,s2是空串,i+j = 0,s3也是空串。空串和空串是可以拼接凑成空串的。所以第一行第一个位置填true

  • s1是空串,s2不是空串,s3也不是空串,如果s2字符串能够对应上s3,填ture,如果有一个字符不能对应,后面都填false
    s2是空串,s1不是空串,s3也不是空串,同理如果s1字符串能够对应上s3,填ture,如果有一个字符不能对应,后面都填false

4.填表顺序

  • 从上往下填写每一行,每一行从左往右
  • 左上 开始填

5.返回值

  • dp[m][n]
class Solution {
public:bool isInterleave(string s1, string s2, string s3) {int m=s1.size(),n=s2.size();if(m+n!=s3.size()) return false;
//预处理s1=' '+s1;s2=' '+s2;s3=' '+s3;vector<vector<bool>> dp(m+1,vector<bool>(n+1,false));dp[0][0]=true;//空串
//初始化//s1 空for(int k=1;k<=n;k++){if(s2[k]!=s3[k])dp[0][k]=false;elsedp[0][k]=dp[0][k-1];//!!  否则的话就继承前值}//s2 空 和s1比对for(int k=1;k<=m;k++){if(s1[k]!=s3[k])dp[k][0]=false;elsedp[k][0]=dp[k-1][0];}for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(s1[i]==s3[i+j] && dp[i-1][j])dp[i][j]=true;if(s2[j]==s3[i+j] && dp[i][j-1])dp[i][j]=true;}}return dp[m][n];}
};

一定要加else才能生效,否则就会继承前值,一直为 true


3.两个字符串的最小ASCII删除和

链接: 712. 两个字符串的最小ASCII删除和

给定两个字符串s1s2,返回 使两个字符串相等所需删除字符的 ASCII 值的最小和

示例 1:

输入: s1 = "sea", s2 = "eat"
输出: 231
解释: 在 "sea" 中删除 "s" 并将 "s" 的值(115)加入总和。
在 "eat" 中删除 "t" 并将 116 加入总和。
结束时,两个字符串相等,115 + 116 = 231 就是符合条件的最小和。

示例 2:

输入: s1 = "delete", s2 = "leet"
输出: 403
解释: 在 "delete" 中删除 "dee" 字符串变成 "let",
将 100[d]+101[e]+101[e] 加入总和。在 "leet" 中删除 "e" 将 101[e] 加入总和。
结束时,两个字符串都等于 "let",结果即为 100+101+101+101 = 403 。
如果改为将两个字符串转换为 "lee" 或 "eet",我们会得到 433 或 417 的结果,比答案更大。

题解

返回 使两个字符串相等 所需删除字符的 ASCII 值的最小和。

  • 在正式解决这道题之前,我们先看一下示例2,第二种删法Ascll码和最小,所以选择第二种。
  • 然后看一下删完之后留下来的字符串。是不是第二种删法留下来的字符串和是最大的。

那现在能不能把上面问题转化一下,你让我找删除的最小和,是不是就是变相去找这两个字符串公共子序列里面Ascll码最大的那个。

  • 这两个字符串Ascll码总和是不变的,你让我找最小
  • 其实就是变相去找公共子序列里面Ascll码和最大的。

正难则反:找最小删除,其实就是保留剩余最大

就又回归到了 保留最大子序列的问题~

1.状态表示

  • 经验 + 题目要求
  • dp[i][j] 表示:s1 的 [0, i] 区间以及 s2 的 [0, j] 区间内的所有子序列里,公共子序列的 ASCll 最大和

2.状态转移方程

根据最后一个位置的状况,分情况讨论

  • 我们要找公共子序列,是不是要从s1拿出来一个子序列,再从s2拿出来一个子序列
  • 判断它们是不是公共子序列
  • 然后把它们Ascll码求一下。然后继续在s1里拿一个,s2里拿一个。。。
  • 把所有情况都找到然后求里面的最大值。

所有从s1拿一个子序列,在从s2那一个子序列有如下情况

  1. 有s1[i],有s2[j]
  2. 有s1[i],没有s2[j]
  3. 没有s1[i],有s2[j]
  4. 没有s1[i],没有s2[j]

然后求出这四种情况的最大值。


有s1[i],有s2[j],子序列是以它们俩为结尾的。

  • 如果是公共子序列是不是这里两个位置要相等啊 s1[i] == s2[j],然后去s1[0, i - 1],s2 [0, j - 1]
  • 找公共子序列Ascll码最大值就是dp[i-1][j-1],然后加上s1[i]的Ascll码或者s2[j]的Ascll码因为它俩Ascll码是一样的。

有s1[i],没有s2[j]

  • 可能会直接想用 dp[i][j - 1] 公共子序列最大Ascll码和。
  • 但是要注意一下这个状态表示, 表示的是[0, i] 区间内所有的子序列,[0, i]既有s[i]也可以没有s[i],也就是说 情况2包含情况4。
  • 所以 s1[i],没有s2[j] 不能直接和 dp[i][j - 1] 划等号。但是没关系,我们求得是一个最大和。管dp[i][j - 1]里面包不包含情况4,你只要包含情况2就可以了。因为我们最后求得是最大值,所有这里可以用dp[i][j - 1]。

同理情况3也是这样。

没有s1[i],没有s2[j],就是dp[i-1][j-1],

  • 考虑变化的情况,每一步都取最大

3.初始化

  1. 引入空串(方便填表)
  2. 里面的值要保证后序的填表是正确的
  3. 下标的映射关系 s=' '+s

4.填表顺序

  • 从上往下填写每一行,每一行从左往右
  • 左上角

5.返回值 s

状态表示求的是两个字符串的区间里面公共子序列的Ascll 最大和

  • 题目要求两个字符串相等所需删除字符的 ASCII 值的最小和 。所以可以这样做
  1. 找到两个字符串中公共子序列的Ascll 最大和,dp[m][n]
  2. 统计两个字符串中Ascll和 -> sum
  3. sum - dp[m][n] * 2

相关文章:

[dp16_两个数组] 通配符匹配 | 交错字符串 | 两个字符串的最小ASCII删除和

目录 1.通配符匹配 题解 2.交错字符串 题解 3.两个字符串的最小ASCII删除和 1.通配符匹配 链接&#xff1a;44. 通配符匹配 给你一个输入字符串 (s) 和一个字符模式 (p) &#xff0c;请你实现一个支持 ? 和 * 匹配规则的通配符匹配&#xff1a; ? 可以匹配任何单个字…...

记录一次生产中mysql主备延迟问题处理

登录库&#xff1a; mysql -uXXXX -pXXXX -P3306 -hXXXXXX -A 备库上执行&#xff1a;show slave status\G 查看 seconds_Behind_Master&#xff0c;延迟 2705s&#xff0c;而且还一直在增加。 SHOW CREATE TABLE proc_i_income_temp; -- 查看表的结构 show index from proc…...

【计算机视觉】OpenCV实战项目-AdvancedLaneDetection 车道检测

AdvancedLaneDetection 项目解析 项目概述项目结构功能和步骤依赖项使用方法项目特点改进建议结论运行项目1. 克隆项目仓库2. 安装依赖项创建虚拟环境&#xff08;可选&#xff09;激活虚拟环境安装依赖项 3. 准备数据4. 运行项目5. 调整配置&#xff08;可选&#xff09;6. 查…...

趣味编程之分布式系统:负载均衡的“雨露均沾“艺术

#此篇文章由Deepseek大力支持&#x1f60b; 凌晨三点&#xff0c;西二旗某火锅店后厨—— “羊肉卷走3号桌&#xff01;” “肥牛卷去7号&#xff01;” “虾滑优先给VIP区&#xff01;” 我蹲在传菜口的监控屏幕前&#xff0c;看着机器人服务生们忙而不乱地穿梭。突然间&am…...

移植firefly core-1126-jd4官方sdk源码到其他rv1126板卡时 kernel启动中失去响应问题解决

问题背景 在项目中采用firefly core-1126-jd4的sdk适配其他rv1126板卡遇到kernel启动中无响应。串口能看到运行到usb、mmc等模块驱动流程&#xff0c;但之后就打印&#xff0c;通过追加打印确认usb、mmc模块的init已经执行完&#xff0c;怀疑是执行其他某个静态编译进kernel的…...

Oracle表的别名不能用as,列的别名可以用as

在 Oracle 数据库中&#xff0c;‌表的别名‌和‌列的别名‌在使用 AS 关键字时确实有不同规则&#xff0c;以下是详细说明&#xff1a; 1. 表的别名&#xff08;Table Alias&#xff09;‌ ‌不支持 AS 关键字‌&#xff0c;直接跟在表名后即可。‌语法示例‌&#xff1a; S…...

对于“人工智能+教育”的一些思考

如果说人工智能当下最合适的落地场景&#xff0c;那么进入课堂这件事一定是排在靠前的位置。从当下的趋势来看&#xff0c;人工智能进入课堂已经不是设想&#xff0c;而是我们必须要去做的一件事了。 方向有了&#xff0c;但是问题是&#xff1a;人工智能进入中小学课堂到底应该…...

Android audio系统四 audiopolicy与audioflinger播放和录音

播放/录音在上层是通过AudioTrack与AudioRecord实现的。通过一张简单的流程图查看audiopolicy与audioflinger进行了哪些操作...

【Pandas】pandas DataFrame xs

Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签&#xff08;行标签和列标签&#…...

开源一体化白板工具Drawnix本地部署打造毫秒级响应的远程协作空间

文章目录 前言1、什么是Drawnix&#xff1f;2、部署Drawnix的环境和步骤3、Drawnix的简单使用方法4、安装cpolar内网穿透5、配置公网地址6、配置固定二级子域名公网地址总结 前言 想象一下&#xff0c;你是一个创意满满的设计师&#xff0c;脑海中涌现出无数灵感火花。你急忙打…...

UMAEA论文阅读

Preliminaries MMKG为一个五元组G{E, R, A, V, T}&#xff0c;其中E、R、A和V分别表示实体集、关系集、属性集和图像集。 T⊆ERE是关系三元组集。 给定两个MMKG G1 {E1, R1, A1, V1, T1} 和 G2 {E2, R2, A2, V2, T2}&#xff0c; MMEA旨在识别每个实体对&#xff08;e1…...

捕鱼船检测数据集VOC+YOLO格式2105张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2105 标注数量(xml文件个数)&#xff1a;2105 标注数量(txt文件个数)&#xff1a;2105 …...

R4打卡——pytorch实现LSTM预测火灾

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 1.检查GPU import torch.nn.functional as F import numpy as np import pandas as pd import torch from torch import nndata pd.read_csv("da…...

【数字图像处理】图像增强

图像增强——频率域分析 卷积定理 函数卷积的傅里叶变换是函数傅里叶变换的乘积&#xff0c;即&#xff1a;一个域中的卷积相当于另一个域中的乘积 F(x)为傅里叶变换 傅里叶 傅里叶级数&#xff1a;任何周期函数都可以用不同频率的正弦函数和余弦函数构成的无穷级数来表示。 正…...

Windows平台用vistual studio 2017打包制作C++动态库

1. 创建库项目 打开 Visual Studio 2017&#xff0c;选择 文件 → 新建 → 项目。选择 Visual C → Windows 桌面 → 动态链接库 (DLL) 或 静态库 (LIB)。 动态库 (DLL)&#xff1a;生成 .dll 和 .lib&#xff08;导出符号表&#xff09;。静态库 (LIB)&#xff1a;生成 .lib&…...

QT日历控件重写美化

效果图 先放一个效果图以供大家参考&#xff0c;大家可以根据自己需要的效果来调整自己的控件&#xff0c;日历控件实现了自定义日历选择框&#xff0c;设置了表头颜色&#xff0c;设置日历当天重要事件提醒功能。 设置表头样式 setVerticalHeaderFormat(QCalendarWidget::NoV…...

单细胞分析读取处理大型数十万细胞的数据集的优化

单细胞分析读取处理大型数十万细胞的数据集的优化 背景简介 有朋友反映用自己的笔记本电脑在分析比较大的单细胞数据集的时候&#xff0c;比如细胞数量有十万个以上甚至几十万个的时候&#xff0c;可能自己的电脑的内存32G或64G都不够用&#xff0c;一般来说&#xff0c;做生…...

HTTP 3.0 协议的特点

HTTP/3 是互联网传输协议的一次重要升级&#xff0c;相较于 HTTP/2&#xff0c;它引入了多项显著改进和新特性。 基于 QUIC 协议&#xff1a; HTTP/3 采用了 QUIC&#xff08;Quick UDP Internet Connections&#xff09;作为底层传输协议&#xff0c;QUIC 基于 UDP&#xff0…...

电子电器架构 --- 下一代汽车电子/电气(E/E)架构

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 周末洗了一个澡&#xff0c;换了一身衣服&#xff0c;出了门却不知道去哪儿&#xff0c;不知道去找谁&am…...

08软件测试需求分析案例-删除用户

删除用户是后台管理菜单的一个功能模块&#xff0c;只有admin才有删除用户的权限。不可删除admin。 1.1 通读文档 通读需求规格说明书是提取信息&#xff0c;提出问题&#xff0c;输出具有逻辑、规则、流程的业务步骤。 信息&#xff1a;此功能应为用户提供确认删除的功能。…...

await 在多线程,子线程中的使用

await 在多线程,子线程中的使用 await self.send_reply(user, user, user, auto_content, reply) 这行代码是在一个异步函数里调用类的实例方法 send_reply 代码含义 1. await 关键字 在 Python 的异步编程里,await 关键字的作用是暂停当前异步函数的执行,直到 await 后…...

NLP高频面试题(四十六)——Transformer 架构中的位置编码及其演化详解

引言 Transformer 模型(Vaswani 等人,2017)在序列建模中取得了革命性突破,利用自注意力机制实现了并行的序列处理。然而,Transformer 本身对序列的顺序信息不敏感:输入序列元素在自注意力中是无排列的(Permutation-invariant)。换言之,Transformer 缺乏像 RNN 那样的…...

C++笔记-list

list即是我们之前学的链表&#xff0c;这篇主要还是讲解list的底层实现&#xff0c;前面会讲一些list区别于前面string和vector的一些接口以及它们的注意事项。 一.list的基本使用 和之前的string&#xff0c;vector一样&#xff0c;有很多之前见过的一些接口&#xff0c;经过…...

机器学习 | 细说Deep Q-Network(DQN)

文章目录 &#x1f4da;传统Q学习的局限性&#x1f4da;DQN介绍&#x1f407;核心思想&#x1f407;关键技术&#x1f407;DQN的工作流程⭐️流程分步讲解&#x1f504; 整体流程循环小结 &#x1f407;DQN的局限性及改进方向 &#x1f440;参考视频&博客 什么是 DQN (Rein…...

【SpringBoot+Vue自学笔记】003 SpringBoot Controll

跟着这位老师学习的&#xff1a;https://www.bilibili.com/video/BV1nV4y1s7ZN?vd_sourceaf46ae3e8740f44ad87ced5536fc1a45 这段话的意思其实是&#xff1a;Spring Boot 简化了传统 Web 项目的搭建流程&#xff0c;让你少折腾配置&#xff0c;直接开搞业务逻辑。 &#x1f52…...

Sentinel源码—4.FlowSlot实现流控的原理一

大纲 1.FlowSlot根据流控规则对请求进行限流 2.FlowSlot实现流控规则的快速失败效果的原理 3.FlowSlot实现流控规则中排队等待效果的原理 4.FlowSlot实现流控规则中Warm Up效果的原理 1.FlowSlot根据流控规则对请求进行限流 (1)流控规则FlowRule的配置Demo (2)注册流控监…...

跟康师傅学Java-基础语法

跟康师傅学Java-基础SE 一、Java语言概述 1. 基本概念 什么是Java?干什么的? 前端是服务员,java做后台的,服务器,好比餐馆的厨师! Java之父:詹姆斯.高斯林(James Gosling) 软件:一系列按照特定顺序组织的计算机数据和指令的集合。分为系统软件和应用软件。 程序…...

Java语言实现递归调用算法

1. 递归调用原理 递归是一种编程技巧&#xff0c;其中函数直接或间接地调用自身。递归的核心思想是将一个复杂问题分解为更小的子问题&#xff0c;直到问题变得足够简单可以直接解决。递归通常包含两个部分&#xff1a; 1. 基础情况&#xff08;Base Case&#xff09;&#xff…...

【数据结构_10】二叉树(1)

一、树 树是一种非线性的数据结构&#xff0c;是由n个有限节点组成一个具有层次关系的集合。树的每个节点能够延伸出多个子节点&#xff0c;但每个子节点只能由一个父节点。 树形结构中&#xff0c;子树之间不能有交集&#xff0c;否则就不是树形结构。 二、树的表示形式 1…...

c++:智能指针

1.智能指针使用场景与优势 void Func() { int* array1 new int[10]; int* array2 new int[10]; try { int len, time; cin >> len >> time; cout << Divide(len, time) << endl; } catch (...) { cout << "delete []" << arr…...

RISC-V简介

RISC-V简介 1. RISC-V RISC-V&#xff08;发音为“riskfive”&#xff09;是一个基于精简指令集&#xff08;RISC&#xff09;原则的全新开源指令集架构&#xff08;ISA&#xff09;。其中的字母“V”包含两层意思&#xff0c;一是这是Berkeley从RISCI开始设计的第五代指令集…...

Google Test 与 Google Mock:C++ 测试与模拟的完美结合

Google Test 与 Google Mock&#xff1a;C 测试与模拟的完美结合 摘要 本文深入解析 Google Test&#xff08;GTest&#xff09;和 Google Mock&#xff08;GMock&#xff09;的核心功能与使用方法&#xff0c;探讨两者在 C 项目中的联合应用及集成策略。通过详细的功能介绍、…...

c语言数据结构----------二叉排序树

#include <stdio.h> #include <malloc.h>//定义二叉排序树 typedef struct BSTnode {int key; //节点值int keyNull; //便于地址传递struct BSTnode *lchild;struct BSTnode *rchild; } BSTnode;//往二叉排序树插入结点 int BSTInsert(BSTnode *T, int k) {if (…...

Sysstat学习

Sysstat&#xff08;System Statistics&#xff09;是一个功能强大的开源工具集&#xff0c;用于监控 Linux 系统的性能和资源使用情况&#xff0c;特别适用于 Ubuntu 系统。它包含多个工具&#xff0c;如 sar、iostat、mpstat 和 pidstat&#xff0c;帮助系统管理员实时或历史…...

智能体开发范式革命:Cangjie Magic的颠覆性创新与行业重塑

开篇:一场静悄悄的技术革命 2025年春季,人工智能领域发生了一场意义深远却鲜为人知的变革。仓颉社区推出的Cangjie Magic智能体开发平台,正以润物细无声的方式重塑着AI应用的构建范式。这并非简单的工具迭代,而是一次从底层逻辑到顶层设计的全面革新。本文将带领读者深入探…...

k8s 下 java 服务出现 OOM 后获取 dump 文件

文章目录 背景解决第 1 步:通过 Dockerfile 挂载 NFS 盘第 2 步:修改 dump 路径为 NFS 盘路径第 3 步:OOM dump 验证参考背景 😂 背景:项目部署在RainBond(k8s)环境下,容器出现 OOM 异常后,k8s 会自动进行滚动更新。 恰恰因为滚动更新,会导致原来的容器被删除。这…...

16位海明码解码电路设计教程

## 1. 海明码基本原理 ### 1.1 什么是海明码 海明码(Hamming Code)是一种能够检测并纠正单比特错误的纠错码&#xff0c;由理查德海明(Richard Hamming)于1950年发明。它通过添加几个校验位(奇偶校验位)到原始数据中&#xff0c;使得数据在传输过程中发生单比特错误时能够被检测…...

九、数据库day01--认识

文章目录 一、认识数据库1.数据库分类关系型数据库核⼼要素示例 2. SQL 语⾔3. MySQL 数据库介绍4. 数据库连接⼯具 Navicat连接数据库操作步骤 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、认识数据库 说明: 数据库是专⻔⽤来存储数据的软…...

2.深入剖析 Rust+Axum 类型安全路由系统

摘要 详细解读 RustAxum 路由系统的关键设计原理&#xff0c;涵盖基于 Rust 类型系统的路由匹配机制、动态路径参数与正则表达式验证以及嵌套路由与模块化组织等多种特性。 一、引言 在现代 Web 开发中&#xff0c;路由系统是构建 Web 应用的核心组件之一&#xff0c;它负责…...

深度学习 从入门到精通 day_02

1. 自动微分 自动微分模块torch.autograd负责自动计算张量操作的梯度&#xff0c;具有自动求导功能。自动微分模块是构成神经网络训练的必要模块&#xff0c;可以实现网络权重参数的更新&#xff0c;使得反向传播算法的实现变得简单而高效。 1.1 基础概念 1. 张量 &#xff1a…...

Selenium 实现自动化分页处理与信息提取

Selenium 实现自动化分页处理与信息提取 在 Web 自动化测试或数据抓取场景中&#xff0c;分页处理是一个常见的需求。通过 Selenium&#xff0c;我们可以实现对多页面内容的自动遍历&#xff0c;并从中提取所需的信息。本文将详细介绍如何利用 Selenium 进行自动化分页处理和信…...

【系统搭建】DPDK实现两虚拟机基于testpmd和l2fwd的收发包

testpmd与l2fwd的配合构建一个高性能的虚拟网络测试环境。l2fwd服务工作在数据链路层&#xff0c;使用MAC地址寻址&#xff0c;很多基于DPDK的策略实现可以基于l2fwd进行开发。 一、拓扑结构示意 ------------------- 虚拟化层网络 ------------------- | 虚拟机1 …...

简单接口工具(ApiCraft-Web)

ApiCraft-Web 项目介绍 ApiCraft-Web 是一个轻量级的 API 测试工具&#xff0c;提供了简洁直观的界面&#xff0c;帮助开发者快速测试和调试 HTTP 接口。 功能特点 支持多种 HTTP 请求方法&#xff08;GET、POST、PUT、DELETE&#xff09;可配置请求参数&#xff08;Query …...

C语言数据类型取值范围

32位C语言整型数据类型取值范围 64位C语言整型数据类型取值范围 C语言标准数据类型保证的取值范围 在编写程序时如果要方便移植&#xff0c;我们应该关注的是图2-11的取值范围。 摘录自《CSAPP》。...

【机器学习】大数据时代,模型训练慢如牛?解锁Spark MLlib与分布式策略

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

合成数据赋能AI:从生成到闭环的全景图谱

目录 合成数据赋能AI&#xff1a;从生成到闭环的全景图谱 &#x1f3af; 项目目标 &#x1f4c4; 白皮书 / PPT 大纲结构 一、合成数据概述&#xff08;What & Why&#xff09; 二、合成数据的核心生成技术&#xff08;How&#xff09; 三、合成数据适配任务&#xf…...

CS144 Lab0实战记录:搭建网络编程基础

文章目录 1 实验概述与背景2 ByteStream的设计与实现2.1 字节流抽象概述2.2 实现思路2.3 核心数据结构2.4 Writer实现细节2.5 Reader实现细节 3 WebGet应用实现 1 实验概述与背景 Stanford大学的CS144课程是计算机网络领域最著名的课程之一&#xff0c;其实验设计巧妙地引导学…...

杂记-LeetCode中部分题思路详解与笔记-HOT100篇-其三

时光荏苒啊&#xff0c;没想到这么快就到了四月份... 这个坑好久没写了&#xff0c;现在我们重启一下。 我看了一下之前的笔记&#xff0c;似乎是停留在了链表部分且HOT100中可以说最重要的链表题之一&#xff1a;LRU缓存居然没有写&#xff0c;真是岂有此理&#xff0c;让我…...

【python画图】:从入门到精通绘制完美柱状图

目录 Python数据可视化&#xff1a;从入门到精通绘制完美柱状图一、基础篇&#xff1a;快速绘制柱状图1.1 使用Matplotlib基础绘制1.2 使用Pandas快速绘图 二、进阶篇&#xff1a;专业级柱状图定制2.1 多系列柱状图2.2 堆叠柱状图2.3 水平柱状图 三、专业参数速查表Matplotlib …...

医疗设备预测性维护的合规性挑战与标准化路径研究

摘要 本研究从医疗设备全生命周期管理视角&#xff0c;探讨预测性维护技术面临的特殊合规性挑战及其标准化解决方案。通过分析全球12个主要医疗市场的监管差异&#xff0c;提出基于ISO 23510的通用合规框架&#xff0c;并验证其在三类典型医疗设备&#xff08;生命支持类、影像…...