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

【算法与数据结构】718、1143、1035、392、115、LeetCode最长重复子数组+最长公共子序列+不相交的线+判断子序列+不同的子序列

文章目录

  • 一、718、最长重复子数组
  • 二、1143、最长公共子序列
  • 三、1035、不相交的线
  • 四、392、判断子序列
  • 五、115、不同的子序列
  • 六、完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

一、718、最长重复子数组

在这里插入图片描述

  思路分析

  • 第一步,动态数组的含义。 d p [ i ] [ j ] dp[i][j] dp[i][j]代表以下标 i − 1 i - 1 i1为结尾的nums1,和以下标 j − 1 j - 1 j1为结尾的nums2,最长重复子数组长度为 d p [ i ] [ j ] dp[i][j] dp[i][j]
  • 第二步,递推公式。根据 d p [ i ] [ j ] dp[i][j] dp[i][j]的定义, d p [ i ] [ j ] dp[i][j] dp[i][j]的状态只能由 d p [ i − 1 ] [ j − 1 ] dp[i - 1][j - 1] dp[i1][j1]推导出来。
	if (nums1[i - 1] == nums2[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;
  • 第三步,元素初始化。dp数组中的所有元素都初始化为0。
  • 第四步,递归顺序。一共有两层循环,先遍历nums1或者先遍历nums2都可以。
  • 第五步,打印结果。题目要求长度最长的子数组的长度。所以在遍历的时候顺便把 d p [ i ] [ j ] dp[i][j] dp[i][j]的最大值记录下来。
      程序如下
// 718、最长重复子数组
class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>> dp(nums1.size() + 1, vector<int>(nums2.size() + 1, 0));int result = 0;for (int i = 1; i <= nums1.size(); i++) {for (int j = 1; j <= nums2.size(); j++) {if (nums1[i - 1] == nums2[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;if (dp[i][j] > result) result = dp[i][j];}}return result;}
};

复杂度分析:

  • 时间复杂度: O ( n ∗ m ) O(n*m) O(nm) n n n m m m分别是两个数组的长度。
  • 空间复杂度: O ( n ∗ m ) O(n*m) O(nm)

二、1143、最长公共子序列

在这里插入图片描述

  思路分析

  1. 第一步,动态数组的含义。 d p [ i ] [ j ] dp[i][j] dp[i][j]代表以下标 i − 1 i - 1 i1为结尾的text1,和以下标 j − 1 j - 1 j1为结尾的text2,最长公共子序列长度为 d p [ i ] [ j ] dp[i][j] dp[i][j]
  2. 第二步,递推公式。 d p [ i ] [ j ] dp[i][j] dp[i][j]可以由两种情况推导出来:
  • t e x t 1 [ i − 1 ] text1[i - 1] text1[i1] t e x t 2 [ j − 1 ] text2[j - 1] text2[j1]相同:那么找到一个公共元素, d p [ i ] [ j ] = d p [ i − 1 ] [ j − 1 ] + 1 dp[i][j] = dp[i - 1][j - 1] + 1 dp[i][j]=dp[i1][j1]+1
  • t e x t 1 [ i − 1 ] text1[i - 1] text1[i1] t e x t 2 [ j − 1 ] text2[j - 1] text2[j1]不相同:那么 t e x t 1 [ 0 , i − 2 ] text1[0, i - 2] text1[0,i2] t e x t 2 [ 0 , j − 1 ] text2[0, j - 1] text2[0,j1]的最长公共子序列和 t e x t 1 [ 0 , i − 1 ] text1[0, i - 1] text1[0,i1] t e x t 2 [ 0 , j − 2 ] text2[0, j - 2] text2[0,j2]的最长公共子序列,取最大的。
	if (text1[i - 1] == text2[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
  1. 第三步,元素初始化。dp数组中的所有元素都初始化为0。
  2. 第四步,递归顺序。一共有两层循环,从前往后进行遍历。
  3. 第五步,打印结果。题目要求最长公共子序列的长度。所以在遍历的时候顺便把 d p [ i ] [ j ] dp[i][j] dp[i][j]的最大值记录下来。
      程序如下
// 1143、最长公共子序列
class Solution2 {
public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>> dp(text1.size() + 1, vector<int>(text2.size() + 1, 0));int result = 0;for (int i = 1; i <= text1.size(); i++) {for (int j = 1; j <= text2.size(); j++) {if (text1[i - 1] == text2[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);if(dp[i][j] > result) result = dp[i][j];}}return result;}
};

复杂度分析:

  • 时间复杂度: O ( n ∗ m ) O(n*m) O(nm) n n n m m m分别是两个序列的长度。
  • 空间复杂度: O ( n ∗ m ) O(n*m) O(nm)

三、1035、不相交的线

在这里插入图片描述
在这里插入图片描述

  思路分析:本题要求绘制的最大连线数,实际上就是求两个字符串的最长公共子序列的长度,即1143、最长公共子序列这道题。我们将字符串改成数组,代码完全一样,直接copy过来。
  程序如下

// 1035、不相交的线
class Solution3 {
public:int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>> dp(nums1.size() + 1, vector<int>(nums2.size() + 1, 0));int result = 0;for (int i = 1; i <= nums1.size(); i++) {for (int j = 1; j <= nums2.size(); j++) {if (nums1[i - 1] == nums2[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);if (dp[i][j] > result) result = dp[i][j];}}return result;}
};

复杂度分析:

  • 时间复杂度: O ( n ∗ m ) O(n*m) O(nm) n n n m m m分别是两个数组的长度。
  • 空间复杂度: O ( n ∗ m ) O(n*m) O(nm)

四、392、判断子序列

在这里插入图片描述

  思路分析:本题的思路和1143、最长公共子序列的分析思路差不多,主要区别在于本题判断的是“ 最长公共子序列是不是另一个字符串的子串”。那么我们找到二者的最长公共子串,判断其长度是否等于s的长度即可。

  1. 第一步,动态数组的含义。 d p [ i ] [ j ] dp[i][j] dp[i][j]代表以下标 i − 1 i - 1 i1为结尾的s,和以下标 j − 1 j - 1 j1为结尾的t,最长公共子序列长度为 d p [ i ] [ j ] dp[i][j] dp[i][j]
  2. 第二步,递推公式。 d p [ i ] [ j ] dp[i][j] dp[i][j]可以由两种情况推导出来:
  • s [ i − 1 ] s[i - 1] s[i1] t [ j − 1 ] t[j - 1] t[j1]相同:那么找到一个公共元素, d p [ i ] [ j ] = d p [ i − 1 ] [ j − 1 ] + 1 dp[i][j] = dp[i - 1][j - 1] + 1 dp[i][j]=dp[i1][j1]+1
  • s [ i − 1 ] s[i - 1] s[i1] t [ j − 1 ] t[j - 1] t[j1]不相同:那么 d p [ i ] [ j ] dp[i][j] dp[i][j]等于 s [ 0 , i − 1 ] s[0, i - 1] s[0,i1] t [ 0 , j − 2 ] t[0, j - 2] t[0,j2]的最长公共子序列。
	if (s[i - 1] == t[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;else dp[i][j] = dp[i][j - 1];		// 与1143不同的地方
  1. 第三步,元素初始化。dp数组中的所有元素都初始化为0。
  2. 第四步,递归顺序。一共有两层循环,从前往后进行遍历。
  3. 第五步,打印结果。题目要求最长公共子序列的长度。所以在遍历的时候顺便把 d p [ i ] [ j ] dp[i][j] dp[i][j]的最大值记录下来,在用三目运算符返回。
	return result == s.size() ? true : false;	// 与1143不同的地方

  程序如下

// 392、判断子序列-动态规划
class Solution4 {
public:bool isSubsequence(string s, string t) {vector<vector<int>> dp(s.size() + 1, vector<int>(t.size() + 1, 0));int result = 0;for (int i = 1; i <= s.size(); i++) {for (int j = 1; j <= t.size(); j++) {if (s[i - 1] == t[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;else dp[i][j] = dp[i][j - 1];		// 与1143不同的地方if (dp[i][j] > result) result = dp[i][j];}}return result == s.size() ? true : false;	// 与1143不同的地方}
};

复杂度分析:

  • 时间复杂度: O ( n ∗ m ) O(n*m) O(nm) n n n m m m分别是两个字符串的长度。
  • 空间复杂度: O ( n ∗ m ) O(n*m) O(nm)

五、115、不同的子序列

在这里插入图片描述

  思路分析:本题的思路和1143、最长公共子序列的分析思路差不多。本题统计字符串t在字符串s中出现的次数,我们可以理解为删除掉字符串s中的部分字符使得字符串s和字符串t相同的方法数量。

  1. 第一步,动态数组的含义。 d p [ i ] [ j ] dp[i][j] dp[i][j]代表以下标 j − 1 j - 1 j1为结尾的t在以下标 i − 1 i - 1 i1为结尾的s中出现的次数为 d p [ i ] [ j ] dp[i][j] dp[i][j],即 t [ 0 , j − 1 ] t[0, j-1] t[0,j1] s [ 0 , i − 1 ] s[0, i-1] s[0,i1]中出现的次数。

  2. 第二步,递推公式。 d p [ i ] [ j ] dp[i][j] dp[i][j]可以由两种情况推导出来:

  • s [ i − 1 ] s[i - 1] s[i1] t [ j − 1 ] t[j - 1] t[j1]相同:此时的 d p [ i ] [ j ] dp[i][j] dp[i][j]由两部分组成。一部分是用 s [ i − 1 ] s[i-1] s[i1]来匹配:相当于在 s [ 0 , i − 2 ] s[0, i-2] s[0,i2]中寻找 t [ 0 , j − 2 ] t[0, j-2] t[0,j2]的个数(剩下一个字符 s [ i − 1 ] s[i - 1] s[i1] t [ j − 1 ] t[j - 1] t[j1]已经匹配了),即 d p [ i − 1 ] [ j − 1 ] dp[i-1][j-1] dp[i1][j1];另一部分是不用 s [ i − 1 ] s[i-1] s[i1]来匹配,相当于在 s [ 0 , i − 2 ] s[0, i-2] s[0,i2]中寻找 t [ 0 , j − 1 ] t[0, j-1] t[0,j1]的个数,即 d p [ i − 1 ] [ j ] dp[i-1][j] dp[i1][j]
  • s [ i − 1 ] s[i - 1] s[i1] t [ j − 1 ] t[j - 1] t[j1]不相同:那么 s [ 0 , i − 2 ] s[0, i - 2] s[0,i2]中, t [ 0 , j − 1 ] t[0, j - 1] t[0,j1]的数量和 s [ 0 , i − 1 ] s[0, i - 1] s[0,i1]中, t [ 0 , j − 1 ] t[0, j - 1] t[0,j1]的数量相同。 d p [ i ] [ j ] = d p [ i − 1 ] [ j ] dp[i][j] = dp[i-1][j] dp[i][j]=dp[i1][j]
	if (s[i - 1] == t[j - 1]) dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];	else dp[i][j] = dp[i - 1][j];

  例子:s=“bageg”,t=“bag”。那么用s[4]="g"组成bag的方法数量,相当于在s[0, 3]="bage"中寻找中t[0, 1]="ba"的个数,只有s[0]s[1]s[4]这一种。而不用s[4]="g"组成bag的方法数量,相当于在s[0,3] ="bage"中,寻找t[0,2]="bag"的个数,即dp[4, 3],只有s[0]s[1]s[2]这一种。(说明:dp[4,2]=1代表在s[0,3] ="bage"中,t[0,1]="ba"的个数为1。)

在这里插入图片描述

  1. 第三步,元素初始化。 d p [ i ] [ 0 ] dp[i][0] dp[i][0](第一列)表示字符串 s [ 0 , i − 1 ] s[0, i-1] s[0,i1]中可以随便删除元素,出现空字符串的个数。 d p [ 0 ] [ j ] dp[0][j] dp[0][j](第一行)表示空字符串 s s s,出现字符串 t [ 0 , j − 1 ] t[0, j-1] t[0,j1]的个数。其中,空字符串s中空字符串t的个数为1。那么 d p [ 0 ] [ 0 ] = 1 , d p [ i ] [ 0 ] = 1 , d p [ 0 ] [ j ] = 0 dp[0][0]=1, dp[i][0] = 1, dp[0][j] = 0 dp[0][0]=1,dp[i][0]=1,dp[0][j]=0
  2. 第四步,递归顺序。一共有两层循环,从前往后进行遍历。
  3. 第五步,打印结果。
      程序如下
// 115、不同的子序列-动态规划
class Solution5 {
public:int numDistinct(string s, string t) {vector<vector<uint64_t>> dp(s.size() + 1, vector<uint64_t>(t.size() + 1, 0));for (int i = 0; i <= s.size(); i++) dp[i][0] = 1;		// 第一列初始化为1, dp[0][0]为1for (int j = 1; j <= t.size(); j++) dp[0][j] = 0;		// 第一行初始化为0, 可以省略for (int i = 1; i <= s.size(); i++) {for (int j = 1; j <= t.size(); j++) {if (s[i - 1] == t[j - 1]) dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];	else dp[i][j] = dp[i - 1][j];}}return dp[s.size()][t.size()];}
};

复杂度分析:

  • 时间复杂度: O ( n ∗ m ) O(n*m) O(nm) n n n m m m分别是两个字符串的长度。
  • 空间复杂度: O ( n ∗ m ) O(n*m) O(nm)

六、完整代码

# include <iostream>
# include <vector>
# include <string>
using namespace std;// 718、最长重复子数组
class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>> dp(nums1.size() + 1, vector<int>(nums2.size() + 1, 0));int result = 0;for (int i = 1; i <= nums1.size(); i++) {for (int j = 1; j <= nums2.size(); j++) {if (nums1[i - 1] == nums2[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;if (dp[i][j] > result) result = dp[i][j];}}return result;}
};// 1143、最长公共子序列
class Solution2 {
public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>> dp(text1.size() + 1, vector<int>(text2.size() + 1, 0));int result = 0;for (int i = 1; i <= text1.size(); i++) {for (int j = 1; j <= text2.size(); j++) {if (text1[i - 1] == text2[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);if (dp[i][j] > result) result = dp[i][j];}}return result;}
};// 1035、不相交的线-动态规划
class Solution3 {
public:int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>> dp(nums1.size() + 1, vector<int>(nums2.size() + 1, 0));int result = 0;for (int i = 1; i <= nums1.size(); i++) {for (int j = 1; j <= nums2.size(); j++) {if (nums1[i - 1] == nums2[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);if (dp[i][j] > result) result = dp[i][j];}}return result;}
};// 392、判断子序列-动态规划
class Solution4 {
public:bool isSubsequence(string s, string t) {vector<vector<int>> dp(s.size() + 1, vector<int>(t.size() + 1, 0));int result = 0;for (int i = 1; i <= s.size(); i++) {for (int j = 1; j <= t.size(); j++) {if (s[i - 1] == t[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;else dp[i][j] = dp[i][j - 1];		// 与1143不同的地方if (dp[i][j] > result) result = dp[i][j];}}return result == s.size() ? true : false;	// 与1143不同的地方}
};// 115、不同的子序列-动态规划
class Solution5 {
public:int numDistinct(string s, string t) {vector<vector<uint64_t>> dp(s.size() + 1, vector<uint64_t>(t.size() + 1, 0));for (int i = 0; i <= s.size(); i++) dp[i][0] = 1;		// 第一列初始化为1, dp[0][0]为1for (int j = 1; j <= t.size(); j++) dp[0][j] = 0;		// 第一行初始化为0, 可以省略for (int i = 1; i <= s.size(); i++) {for (int j = 1; j <= t.size(); j++) {if (s[i - 1] == t[j - 1]) dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];	else dp[i][j] = dp[i - 1][j];}}return dp[s.size()][t.size()];}
};int main() {//vector<int> nums1 = { 1, 2, 3, 2, 1 }, nums2 = { 3, 2, 1, 4, 7 };		// 测试案例//Solution s1;//int result = s1.findLength(nums1, nums2);//string text1 = "abcde", text2 = "ace";		// 测试案例//Solution2 s1;//int result = s1.longestCommonSubsequence(text1, text2);//vector<int> nums1 = { 1, 4, 2 }, nums2 = { 1, 2, 4 };		// 测试案例//Solution3 s1;//int result = s1.maxUncrossedLines(nums1, nums2);//string s = "abc", t = "ahbgdc";			// 测试案例//Solution4 s1;//int result = s1.isSubsequence(s, t);string s = "babgbag", t = "bag";		// 测试案例Solution5 s1;int result = s1.numDistinct(s, t);cout << result << endl;system("pause");return 0;
}

end

相关文章:

【算法与数据结构】718、1143、1035、392、115、LeetCode最长重复子数组+最长公共子序列+不相交的线+判断子序列+不同的子序列

文章目录 一、718、最长重复子数组二、1143、最长公共子序列三、1035、不相交的线四、392、判断子序列五、115、不同的子序列六、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、718、最长重复子数组 思路分析&#xff1…...

OCR文本纠错思路

文字错误类别&#xff1a;多字 少字 形近字 当前方案 文本纠错思路 简单&#xff1a; 一、构建自定义词典&#xff0c;提高分词正确率。不在词典中&#xff0c;也不是停用词&#xff0c;分成单字的数据极有可能是错字&#xff08;少部分可能是新词&#xff09;。错字与前后的…...

【java批量导出pdf】优化方案

问题情境&#xff1a; 项目中存在web页面点击一键导出&#xff0c;导出所有数据对应的pdf文件&#xff0c;由于有些pdf文件是实时生成的&#xff0c;之前最简答的写法for循环处理速度太慢&#xff0c;超过了nginx配置的最大响应时间了&#xff0c;且对用户交互体验上很不友好&…...

Linux第42步_移植ST公司uboot的第3步_uboot命令测试,搭建nfs服务器和tftp服务器

测试uboot命令&#xff0c;搭建nfs服务器和tftp服务器&#xff0c;是测试uboot非常关键的一步。跳过这一节&#xff0c;后面可能要踩坑。 一、输入“help回车”&#xff0c;查询uboot所支持的命令 二、输入“? bootz回车”&#xff0c;查询“bootz”怎么用 注意&#xff1a;和…...

C++枚举算法(3)

我家的门牌号 题目描述&#xff1a; 我家住在一条短胡同里&#xff0c;这条胡同的门牌号从1开始顺序编号。 若所有的门牌号之和减去我家门牌号的两倍&#xff0c;恰好等于n&#xff0c;求 我家的门牌号及总共有多少家。 数据保证有唯一解。 输入 一个正整数n。n < 100000。…...

【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…...

Day 17------C语言收尾之链表的删除、位运算、预处理、宏定义

链表 空链表&#xff1a; 注意&#xff1a;函数不能返回局部变量的地址 操作&#xff1a; 1.创建空链表 2.头插 3.尾插 4.链表遍历 5.链表的长度 free&#xff1a;释放 删除&#xff1a; 头删 void popFront(struct Node *head) { //1.p指针变量指向首节点 //2.断…...

python_蓝桥杯刷题记录_笔记_全AC代码_入门5

前言 关于入门地刷题到现在就结束了。 题单目录 1.P1579 哥德巴赫猜想&#xff08;升级版&#xff09; 2.P1426 小鱼会有危险吗 1.P1579 哥德巴赫猜想&#xff08;升级版&#xff09; 一开始写的代码是三重循环&#xff0c;结果提交上去一堆地TLE&#xff0c;然后我就给减少…...

二叉树的详解

二叉树 【本节目标】 掌握树的基本概念掌握二叉树概念及特性掌握二叉树的基本操作完成二叉树相关的面试题练习 树型结构&#xff08;了解&#xff09; 概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。…...

【第三十五节】idea项目的创建以及setting和Project Structure的设置

项目创建 Project Structure的设置 点击file ~ Project Structure 进入...

【c++】跟webrtc学引用计数

rtc::RefCountInterface 接口类 G:\CDN\rtcCli\m98\src\rtc_base\ref_count.h引用计数想形成一种树状结构 // Interfaces where refcounting is part of the public api should // inherit this abstract interface. The implementation of these // methods is usually provid…...

开源免费的物联网网关 IoT Gateway

1. 概述 物联网网关&#xff0c;也被称为IOT网关&#xff0c;是一种至关重要的网络设备。在物联网系统中&#xff0c;它承担着连接和控制各种设备的重要任务&#xff0c;将这些设备有效地连接到云端、本地服务器或其他设备上。它既能够在广域范围内实现互联&#xff0c;也能在…...

华为OD机试真题C卷-篇3

文章目录 查找一个有向网络的头节点和尾节点幼儿园篮球游戏 查找一个有向网络的头节点和尾节点 在一个有向图中&#xff0c;有向边用两个整数表示&#xff0c;第一个整数表示起始节点&#xff0c;第二个整数表示终止节点&#xff1b;图中只有一个头节点&#xff0c;一个或者多…...

[SWPUCTF 2021 新生赛]include

他让我们传入一个flag值 我们传入即可看到代码部分 传入一个php的伪类即可 得到经过Base64加密的flag&#xff0c;解密即可...

LeetCode、17. 电话号码的字母组合【中等,dfs回溯】

文章目录 前言LeetCode、17. 电话号码的字母组合【中等&#xff0c;dfs回溯】题目与类型思路递归回溯优化&#xff1a;StringBuilder来回溯补充代码&#xff1a;2024.1.31&#xff08;简化&#xff09; 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博…...

SSRF漏洞给云服务元数据带来的安全威胁

文章目录 前言元数据服务威胁1.1 Metadata元数据1.2 RAM资源管理角色1.3 STS 临时凭据利用1.4 CF云环境利用框架1.5 元数据安全性增强 TerraformGoat2.1 永久性AccessKey2.2 SSRF靶场环境搭建2.3 腾讯云CVM配角色2.4 接管腾讯云控制台 SSRF组合拳案例3.1 上传图片功能SSRF3.2 文…...

【C++】强制类型转换

强制类型转换分为显式和隐式 显式直接用小括号强制转换&#xff0c;float b (int)a; 隐式直接 float b 0.5; int a b; C中更推荐用四个强制类型转换的关键字&#xff1a; 1、static_cast&#xff0c; 2、const_cast&#xff0c; 3、reinterpret_cast&#xff0c; 4、dynami…...

java日志框架总结(四 、JCL日志门面技术)

日志框架出现的历史顺序&#xff1a;Log4j → JUL → JCL → slf4j → logback → log4j2 一、背景 在前面博文中&#xff0c;我们分别讲述了常用的2个日志框架&#xff1a;JUL&#xff08;Java Util Logging&#xff09;、Log4J。那么如何选择使用哪一个呢&#xff1f; 根据项…...

mfc140.dll丢失的几种修复方式,有效的解决文件丢失问题

mfc140.dll是Microsoft Foundation Class (MFC)库中的一个非常重要的DLL文件。它承载了许多被执行程序使用的函数和资源。这个库主要被广泛应用于开发Windows操作系统上的应用程序。然而&#xff0c;有时候我们可能会遭遇到mfc140.dll缺失或损坏的情况&#xff0c;这会导致依赖…...

从一个小故事讲解观察者模式~

定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 什么是观察者模式&#xff1f; 观察者模式在我们的日常生活中极其常见。 先来看看观察者模式的定义&#xff1a; 观察者模式定义了对象之间…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...