【算法与数据结构】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 i−1为结尾的nums1,和以下标 j − 1 j - 1 j−1为结尾的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[i−1][j−1]推导出来。
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(n∗m), n n n和 m m m分别是两个数组的长度。
- 空间复杂度: O ( n ∗ m ) O(n*m) O(n∗m)。
二、1143、最长公共子序列
思路分析:
- 第一步,动态数组的含义。 d p [ i ] [ j ] dp[i][j] dp[i][j]代表以下标 i − 1 i - 1 i−1为结尾的text1,和以下标 j − 1 j - 1 j−1为结尾的text2,最长公共子序列长度为 d p [ i ] [ j ] dp[i][j] dp[i][j]。
- 第二步,递推公式。 d p [ i ] [ j ] dp[i][j] dp[i][j]可以由两种情况推导出来:
- t e x t 1 [ i − 1 ] text1[i - 1] text1[i−1]与 t e x t 2 [ j − 1 ] text2[j - 1] text2[j−1]相同:那么找到一个公共元素, d p [ i ] [ j ] = d p [ i − 1 ] [ j − 1 ] + 1 dp[i][j] = dp[i - 1][j - 1] + 1 dp[i][j]=dp[i−1][j−1]+1。
- t e x t 1 [ i − 1 ] text1[i - 1] text1[i−1] 与 t e x t 2 [ j − 1 ] text2[j - 1] text2[j−1]不相同:那么 t e x t 1 [ 0 , i − 2 ] text1[0, i - 2] text1[0,i−2]与 t e x t 2 [ 0 , j − 1 ] text2[0, j - 1] text2[0,j−1]的最长公共子序列和 t e x t 1 [ 0 , i − 1 ] text1[0, i - 1] text1[0,i−1]与 t e x t 2 [ 0 , j − 2 ] text2[0, j - 2] text2[0,j−2]的最长公共子序列,取最大的。
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]);
- 第三步,元素初始化。dp数组中的所有元素都初始化为0。
- 第四步,递归顺序。一共有两层循环,从前往后进行遍历。
- 第五步,打印结果。题目要求最长公共子序列的长度。所以在遍历的时候顺便把 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(n∗m), n n n和 m m m分别是两个序列的长度。
- 空间复杂度: O ( n ∗ m ) O(n*m) O(n∗m)。
三、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(n∗m), n n n和 m m m分别是两个数组的长度。
- 空间复杂度: O ( n ∗ m ) O(n*m) O(n∗m)。
四、392、判断子序列
思路分析:本题的思路和1143、最长公共子序列的分析思路差不多,主要区别在于本题判断的是“ 最长公共子序列是不是另一个字符串的子串”。那么我们找到二者的最长公共子串,判断其长度是否等于s的长度即可。
- 第一步,动态数组的含义。 d p [ i ] [ j ] dp[i][j] dp[i][j]代表以下标 i − 1 i - 1 i−1为结尾的s,和以下标 j − 1 j - 1 j−1为结尾的t,最长公共子序列长度为 d p [ i ] [ j ] dp[i][j] dp[i][j]。
- 第二步,递推公式。 d p [ i ] [ j ] dp[i][j] dp[i][j]可以由两种情况推导出来:
- s [ i − 1 ] s[i - 1] s[i−1]与 t [ j − 1 ] t[j - 1] t[j−1]相同:那么找到一个公共元素, d p [ i ] [ j ] = d p [ i − 1 ] [ j − 1 ] + 1 dp[i][j] = dp[i - 1][j - 1] + 1 dp[i][j]=dp[i−1][j−1]+1。
- s [ i − 1 ] s[i - 1] s[i−1] 与 t [ j − 1 ] t[j - 1] t[j−1]不相同:那么 d p [ i ] [ j ] dp[i][j] dp[i][j]等于 s [ 0 , i − 1 ] s[0, i - 1] s[0,i−1]与 t [ 0 , j − 2 ] t[0, j - 2] t[0,j−2]的最长公共子序列。
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不同的地方
- 第三步,元素初始化。dp数组中的所有元素都初始化为0。
- 第四步,递归顺序。一共有两层循环,从前往后进行遍历。
- 第五步,打印结果。题目要求最长公共子序列的长度。所以在遍历的时候顺便把 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(n∗m), n n n和 m m m分别是两个字符串的长度。
- 空间复杂度: O ( n ∗ m ) O(n*m) O(n∗m)。
五、115、不同的子序列
思路分析:本题的思路和1143、最长公共子序列的分析思路差不多。本题统计字符串t在字符串s中出现的次数,我们可以理解为删除掉字符串s中的部分字符使得字符串s和字符串t相同的方法数量。
-
第一步,动态数组的含义。 d p [ i ] [ j ] dp[i][j] dp[i][j]代表以下标 j − 1 j - 1 j−1为结尾的t在以下标 i − 1 i - 1 i−1为结尾的s中出现的次数为 d p [ i ] [ j ] dp[i][j] dp[i][j],即 t [ 0 , j − 1 ] t[0, j-1] t[0,j−1]在 s [ 0 , i − 1 ] s[0, i-1] s[0,i−1]中出现的次数。
-
第二步,递推公式。 d p [ i ] [ j ] dp[i][j] dp[i][j]可以由两种情况推导出来:
- s [ i − 1 ] s[i - 1] s[i−1]与 t [ j − 1 ] t[j - 1] t[j−1]相同:此时的 d p [ i ] [ j ] dp[i][j] dp[i][j]由两部分组成。一部分是用 s [ i − 1 ] s[i-1] s[i−1]来匹配:相当于在 s [ 0 , i − 2 ] s[0, i-2] s[0,i−2]中寻找 t [ 0 , j − 2 ] t[0, j-2] t[0,j−2]的个数(剩下一个字符 s [ i − 1 ] s[i - 1] s[i−1]与 t [ j − 1 ] t[j - 1] t[j−1]已经匹配了),即 d p [ i − 1 ] [ j − 1 ] dp[i-1][j-1] dp[i−1][j−1];另一部分是不用 s [ i − 1 ] s[i-1] s[i−1]来匹配,相当于在 s [ 0 , i − 2 ] s[0, i-2] s[0,i−2]中寻找 t [ 0 , j − 1 ] t[0, j-1] t[0,j−1]的个数,即 d p [ i − 1 ] [ j ] dp[i-1][j] dp[i−1][j]。
- s [ i − 1 ] s[i - 1] s[i−1] 与 t [ j − 1 ] t[j - 1] t[j−1]不相同:那么 s [ 0 , i − 2 ] s[0, i - 2] s[0,i−2]中, t [ 0 , j − 1 ] t[0, j - 1] t[0,j−1]的数量和 s [ 0 , i − 1 ] s[0, i - 1] s[0,i−1]中, t [ 0 , j − 1 ] t[0, j - 1] t[0,j−1]的数量相同。 d p [ i ] [ j ] = d p [ i − 1 ] [ j ] dp[i][j] = dp[i-1][j] dp[i][j]=dp[i−1][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。)
- 第三步,元素初始化。 d p [ i ] [ 0 ] dp[i][0] dp[i][0](第一列)表示字符串 s [ 0 , i − 1 ] s[0, i-1] s[0,i−1]中可以随便删除元素,出现空字符串的个数。 d p [ 0 ] [ j ] dp[0][j] dp[0][j](第一行)表示空字符串 s s s,出现字符串 t [ 0 , j − 1 ] t[0, j-1] t[0,j−1]的个数。其中,空字符串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。
- 第四步,递归顺序。一共有两层循环,从前往后进行遍历。
- 第五步,打印结果。
程序如下:
// 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(n∗m), n n n和 m m m分别是两个字符串的长度。
- 空间复杂度: O ( n ∗ m ) O(n*m) O(n∗m)。
六、完整代码
# 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题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、718、最长重复子数组 思路分析࿱…...

OCR文本纠错思路
文字错误类别:多字 少字 形近字 当前方案 文本纠错思路 简单: 一、构建自定义词典,提高分词正确率。不在词典中,也不是停用词,分成单字的数据极有可能是错字(少部分可能是新词)。错字与前后的…...
【java批量导出pdf】优化方案
问题情境: 项目中存在web页面点击一键导出,导出所有数据对应的pdf文件,由于有些pdf文件是实时生成的,之前最简答的写法for循环处理速度太慢,超过了nginx配置的最大响应时间了,且对用户交互体验上很不友好&…...

Linux第42步_移植ST公司uboot的第3步_uboot命令测试,搭建nfs服务器和tftp服务器
测试uboot命令,搭建nfs服务器和tftp服务器,是测试uboot非常关键的一步。跳过这一节,后面可能要踩坑。 一、输入“help回车”,查询uboot所支持的命令 二、输入“? bootz回车”,查询“bootz”怎么用 注意:和…...
C++枚举算法(3)
我家的门牌号 题目描述: 我家住在一条短胡同里,这条胡同的门牌号从1开始顺序编号。 若所有的门牌号之和减去我家门牌号的两倍,恰好等于n,求 我家的门牌号及总共有多少家。 数据保证有唯一解。 输入 一个正整数n。n < 100000。…...

【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)
前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…...

Day 17------C语言收尾之链表的删除、位运算、预处理、宏定义
链表 空链表: 注意:函数不能返回局部变量的地址 操作: 1.创建空链表 2.头插 3.尾插 4.链表遍历 5.链表的长度 free:释放 删除: 头删 void popFront(struct Node *head) { //1.p指针变量指向首节点 //2.断…...

python_蓝桥杯刷题记录_笔记_全AC代码_入门5
前言 关于入门地刷题到现在就结束了。 题单目录 1.P1579 哥德巴赫猜想(升级版) 2.P1426 小鱼会有危险吗 1.P1579 哥德巴赫猜想(升级版) 一开始写的代码是三重循环,结果提交上去一堆地TLE,然后我就给减少…...

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

【第三十五节】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. 概述 物联网网关,也被称为IOT网关,是一种至关重要的网络设备。在物联网系统中,它承担着连接和控制各种设备的重要任务,将这些设备有效地连接到云端、本地服务器或其他设备上。它既能够在广域范围内实现互联,也能在…...

华为OD机试真题C卷-篇3
文章目录 查找一个有向网络的头节点和尾节点幼儿园篮球游戏 查找一个有向网络的头节点和尾节点 在一个有向图中,有向边用两个整数表示,第一个整数表示起始节点,第二个整数表示终止节点;图中只有一个头节点,一个或者多…...

[SWPUCTF 2021 新生赛]include
他让我们传入一个flag值 我们传入即可看到代码部分 传入一个php的伪类即可 得到经过Base64加密的flag,解密即可...

LeetCode、17. 电话号码的字母组合【中等,dfs回溯】
文章目录 前言LeetCode、17. 电话号码的字母组合【中等,dfs回溯】题目与类型思路递归回溯优化:StringBuilder来回溯补充代码:2024.1.31(简化) 资料获取 前言 博主介绍:✌目前全网粉丝2W,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++】强制类型转换
强制类型转换分为显式和隐式 显式直接用小括号强制转换,float b (int)a; 隐式直接 float b 0.5; int a b; C中更推荐用四个强制类型转换的关键字: 1、static_cast, 2、const_cast, 3、reinterpret_cast, 4、dynami…...

java日志框架总结(四 、JCL日志门面技术)
日志框架出现的历史顺序:Log4j → JUL → JCL → slf4j → logback → log4j2 一、背景 在前面博文中,我们分别讲述了常用的2个日志框架:JUL(Java Util Logging)、Log4J。那么如何选择使用哪一个呢? 根据项…...

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

从一个小故事讲解观察者模式~
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 什么是观察者模式? 观察者模式在我们的日常生活中极其常见。 先来看看观察者模式的定义: 观察者模式定义了对象之间…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...