【动态规划】子序列问题
个人主页 : zxctscl
专栏 【C++】、 【C语言】、 【Linux】、 【数据结构】、 【算法】
如有转载请先通知
文章目录
- 前言
- 1 ==300. 最长递增子序列(经典)==
- 3.1 分析
- 3.2 代码
- 2 376. 摆动序列
- 2.1 分析
- 2.2 代码
- 3 673. 最长递增子序列的个数
- 3.1 分析
- 3.2 代码
- 4 646. 最长数对链
- 4.1 分析
- 4.2 代码
- 5 1218. 最长定差子序列
- 5.1 分析
- 5.2 代码
- 6 873. 最长的斐波那契子序列的长度
- 6.1 分析
- 6.2 代码
- 7 1027. 最长等差数列
- 7.1 分析
- 7.2 代码
- 8 446. 等差数列划分 II - 子序列
- 8.1 分析
- 8.2 代码
前言
在上一篇有关动态规划的博客中,谈到做这类题目的步骤,有需要的可以点这个链接: 【动态规划】斐波那契额数列模型。继续分享这个模型类型的题目。
1 300. 最长递增子序列(经典)
子序列中挑选的元素是可以不连续的,但是得保证子序列中元素的出现的相对顺序和原数组中是一致的。
像[a,b,d]就是[a,b,c,d,e]的一个子序列,而[d,a,b]就不是。
3.1 分析
-
状态表示
dp[i]表示:以i位置为结尾的所有子序列中,最长递增子序列的长度。 -
状态转移方程
可以分两类,一类是就以i为子序列;
第二类是跟前面元素一起构成子序列,但此时必须是前面的元素小于i,此时条件下再找最长子序列,要想和i组成最长,j也是最长子序列就是dp[j],再加上1就是最大的子序列。
-
初始化
把dp表里面所有值初始化为1,就不用考虑为1的情况了。 -
填表顺序
从左往右
- 返回值
dp表里最大值
3.2 代码
class Solution {
public:int lengthOfLIS(vector<int>& nums) {int n=nums.size();vector<int> dp(n,1);int ret=1;for(int i=1;i<n;i++){for(int j=0;j<i;j++){if(nums[j]<nums[i]){dp[i]=max(dp[j]+1,dp[i]);}}ret=max(ret,dp[i]);}return ret;}
};
2 376. 摆动序列
2.1 分析
题目已知,仅有一个元素或者含两个不等元素的序列也视作摆动序列。
示例二中最长摆动序列长度是7
-
状态表示
dp[i]表示:以i位置为结尾的所有的子序列中,最长的摆动序列的长度。
最后一个位置可以分为是下降位置,也开始是上升位置:
此时就细分为两个:
g[i]表示:以i位置为结尾的所有的子序列中,最后一个位置呈现“下降”趋势的最长摆动序列的长度。
f[i]表示:以i位置为结尾的所有的子序列中,最后一个位置呈现“上升”趋势的最长摆动序列的长度。
-
状态转移方程
f[i]可以分为,以i自己为一类,还可以分为和前面的i-1组合,此时将j设置为(0,i-1)
f是呈现上升趋势的,此时i位置的值是大于i-1位置的,也就是说:nums[j]<nums[i]
,此时如果找到以j最后一个位置呈现“下降”趋势的最长的g[j]再加1,但是要的是一个最大值就是max(g[j]+1),f[i])。
g[i]可以分为,以i自己为一类,还可以分为和前面的i-1组合,此时将j设置为(0,i-1)
g是呈现下降趋势的,此时i位置的值是大于i-1位置的,也就是说:nums[j]>nums[i]
,此时如果找到以j最后一个位置呈现“上升”趋势的最长的g[j]再加1,但是要的是一个最大值就是max(f[j]+1),g[i])。
-
初始化
f表和g表全部初始化为1,就不用考虑长度为1的情况。 -
填表顺序
从左往右,两个表一起填 -
返回值
两个表里面的最大值
2.2 代码
class Solution {
public:int wiggleMaxLength(vector<int>& nums) {int n=nums.size();vector<int> g(n,1),f(n,1);int ret=1;for(int i=1;i<n;i++){for(int j=0;j<i;j++){if(nums[i]>nums[j])f[i]=max(f[i],g[j]+1);else if(nums[i]<nums[j])g[i]=max(g[i],f[j]+1);}ret=max(g[i],f[i]);}return ret;}
};
3 673. 最长递增子序列的个数
如何一次遍历在数组中找到最大值出现的次数?
此时用到贪心,首先可以用两个变量,一个maxval用来记录当前扫描到数组中的最大值,另一个用来记录这个最大值出现的次数。
这时候就会出现三种情况:
3.1 分析
- 状态表示
dp[i]表示:以i位置为结尾的所有子序列中,最长递增子序列的个数。
但是此时连最长的子序列多长都不知道,这个状态表示是不够的。
len[i]表示:以i位置为结尾的所有子序列中,最长递增子序列的“长度”。
count[i]表示:以i位置为结尾的所有子序列中,最长递增子序列的“个数”。
- 状态转移方程
第一步以i位置单独为一个子序列就是1;
第二步遍历[0,i-1]要形成递增子序列就必须是nums[j]<nums[i]
,要找到len[j]+1与len[i]中的最大值。
既要找到最长的长度也得找到最长长度出现的次数。
单独一个序列长度就是1;
形成递增序列就必须是nums[j]<nums[i]
,此时会出现三种情况:(1)加上i位置能形成最长递增子序列,j元素为结尾能形成count[j]个递增子序列,此时总共就有count[i]+count[j]个递增子序列。(2)加上i位置能形成最长递增子序列,但跟在后面形成的子序列个数比len[i]少,此时就无视。(3)加上i位置能形成最长递增子序列长度会变成,此时就得更新最长的递增子序列,而且得重新计数,因为是用j位置来更新的,所以const[i]就等于count[j]。
-
初始化
两个表都初始化为1 -
填表顺序
从左往右 -
返回值
贪心策略
3.2 代码
class Solution {
public:int findNumberOfLIS(vector<int>& nums) {int n=nums.size();vector<int> len(n,1),count(n,1);int retlen=1,retcount=1;for(int i=1;i<n;i++){for(int j=0;j<i;j++){if(nums[j]<nums[i]){if(len[j]+1==len[i])count[i]+=count[j];else if(len[j]+1>len[i])len[i]=len[j]+1,count[i]=count[j];}}if(retlen==len[i])retcount+=count[i];else if(retlen<len[i])retlen=len[i],retcount=count[i];}return retcount;}
};
4 646. 最长数对链
4.1 分析
要想得到这种形式的数对链,如果考虑以i位置为结尾,那么比i位置小的都在它前面,比它小的都在它后面,就得提前做一下数据的处理,把原数组按照第一个元素排序。
如果[a,b][c,d]是已经按照第一个元素排好序,那么c>=a,而在pair中左边元素始终小于右边元素,也就是说c<d,此时就能得出d>a,所以[a,b]是绝对不能连在[c,d]后面的。
排序就能保证以i位置为结尾的倒数第二个元素就一定在i位置左边。
-
状态表示
dp[i]表示以i位置为结尾的所有的数对链中,最长的数对链的长度 -
状态转移方程
如果就以i位置为结尾构成一个数对链,长度就是1,;
如果i位置和前面位置一起构成数对链,就得满足前面i-1位置pair中右边元素dp[j][1]小于以i位置为结尾pair中左边元素dp[i][0],这时长度就是dp[j]+1,如果取里面最长的数对链:
-
初始化
把他们初始化为最差的长度,就都初始化为1 -
填表顺序
从左往右 -
返回值
返回里面的最大值
4.2 代码
class Solution {
public:int findLongestChain(vector<vector<int>>& pairs) {sort(pairs.begin(),pairs.end());int n=pairs.size();vector<int> dp(n,1);int ret=1;for(int i=1;i<n;i++){for(int j=0;j<i;j++){if(pairs[j][1]<pairs[i][0]){dp[i]=max(dp[j]+1,dp[i]);}}ret=max(dp[i],ret);}return ret;}
};
5 1218. 最长定差子序列
5.1 分析
-
状态表示
dp[i]表示以i位置的元素为结尾的所以子序列中,最长的等差子序列长度。 -
状态转移方程
如果i位置里面的元素是a,倒数第二个元素是b,就是说a-b=diff,此时b=a-diff。
将b分为两种情况:一种如果b不存在,那么只能是a单独构成子序列,长度就为1;另一种如果b存在,只考虑最后一个,因为b存在那么b前面的元素的值至少是大于或者等于b的值,此时长度就是dp[i]=dp[j]+1
将b的值和dp[j]绑定放在哈希表里,就不用再从前往后遍历,就能直接在哈希表里找到b和dp[j],能直接更新dp[i]。
直接在哈希表中做动态规划
-
初始化
以0位置的元素为结尾的所以子序列中,长度就是1。
hash[arr[0]]=1 -
填表顺序
从左往右 -
返回值
dp表里面的最大值
5.2 代码
class Solution {
public:int longestSubsequence(vector<int>& arr, int difference) {//创建哈希表unordered_map<int,int>hash;//arr[i]-dp[i]hash[arr[0]]=1;int ret=1;for(int i=1;i<arr.size();i++){hash[arr[i]]=hash[arr[i]-difference]+1;ret=max(ret,hash[arr[i]]);}return ret;}
};
6 873. 最长的斐波那契子序列的长度
二维
6.1 分析
-
状态表示
dp[i]表示:以i位置元素为结尾的所有子序列中,最长斐波那契子序列的长度。此时用这个状态表示,就只能知道斐波那契子序列的长度,但并不知道具体的斐波那契数列,所以这个状态表示是不行的。
如果知道斐波那契数列最后面两个数a,b的值,就能知道斐波那契数列前面的数。
dp[i][j]表示以i位置以及j位置为结尾的所有子序列中,最长斐波那契子序列的长度。
此时规定了i<j -
状态转移方程
假设j位置存放的是c,i位置值是b。
此时设倒数第三个数下标是k,那么k位置的存放的值就是是c-b
分三种情况,(1)a存在,而且a<b,那么就能将k和i位置的值拿出来,再往前找前面能构成斐波那契数列的值,也就是dp[k][i],此时长度就是dp[k][i]+1
(2)a存在,但是a在b c之间,不能构成斐波那契数列,但是此时里面有a b两个元素,所以里面的长度就是2
(3)a不存在,就不能构成斐波那契数列,但是此时里面有两个元素,所以里面的长度就是2
优化:
在做动态规划之前,先把值和它们下标绑定,就可以先存到哈希表中,就能直接找到下标
-
初始化
把表里所有的值都初始为2 -
填表顺序
从上往下 -
返回值
返回dp表里面的最大值ret,如果里面没有最长斐波那契子序列,就返回0,否则就返回ret
6.2 代码
class Solution {
public:int lenLongestFibSubseq(vector<int>& arr) {int n = arr.size();unordered_map<int, int>hash;for (int i = 0; i < n; i++){hash[arr[i]] = i;}int ret = 2;vector<vector<int>> dp(n, vector(n, 2));for (int j = 2; j < n; j++)//固定最后一个位置{for (int i = 1; i < j; i++)//固定倒数第二个位置{int a = arr[j] - arr[i];if (hash.count(a) && a < arr[i])dp[i][j] = dp[hash[a]][i] + 1;ret = max(ret, dp[i][j]);}}return ret < 3 ? 0 : ret;}
};
7 1027. 最长等差数列
7.1 分析
同上面一题类似
- 状态表示
dp[i]表示:以i位置元素为结尾的所有子序列中,最长等差数列子序列的长度。此时用这个状态表示,就只能知道等差数列子序列的长度,但并不知道具体的等差数列的值,所以这个状态表示是不行的。
如果知道等差数列最后面两个数a,b的值,就能知道等差数列前面的数。
dp[i][j]表示以i位置以及j位置为结尾的所有子序列中,最长等差数列子序列的长度。
此时规定了i<j
- 状态转移方程
分三种情况,(1)a存在,而且a<b,那么就能将k和i位置的值拿出来,再往前找前面能构成等差数列的值,也就是dp[k][i],此时长度就是dp[k][i]+1
(2)a存在,但是a在b c之间,不能构成等差数列,但是此时里面有a b两个元素,所以里面的长度就是2
(3)a不存在,就不能构成等差数列,但是此时里面有两个元素,所以里面的长度就是2
优化:
有两种方式:
(1)在做dp之前,先把值和它们下标绑定,就可以先存到哈希表中,<元素,下标组>
(2)一边dp,一边保存离他最近的下标元素的下标<元素,下标>
选择第二种方式填表,当i位置填完之后,将i位置的值放入哈希表中即可
-
初始化
dp表里面初始化为2 -
填表顺序
有两种填表顺序:
(1)先固定最后一个数j,再枚举倒数第二个数,此时i是一直移动的
(2)先固定倒数第二个数,再枚举最后一个数,这时候i和j同时向后移动一位
-
返回值
返回dp表中的最大值
7.2 代码
class Solution {
public:int longestArithSeqLength(vector<int>& nums) {unordered_map<int,int> hash;hash[nums[0]]=0;int n = nums.size();vector<vector<int>> dp(n, vector<int>(n, 2));int ret = 2; for (int i = 1; i < n; i++)//固定倒数第二个位置{for (int j = i+1; j < n; j++)//枚举倒数第一个数{int a = 2*nums[i]-nums[j] ;if (hash.count(a))dp[i][j] = dp[hash[a]][i] + 1;ret = max(ret, dp[i][j]);}hash[nums[i]]=i;}return ret ;}};
8 446. 等差数列划分 II - 子序列
8.1 分析
同上面一题类似,只是这里要找到是等差数列的个数
- 状态表示
- dp[i]表示:以i位置元素为结尾的所有子序列中,等差数列子序列的个数。此时用这个状态表示,就只能知道等差数列子序列的个数,但并不知道具体的等差数列的值,所以这个状态表示是不行的。
如果知道等差数列最后面两个数a,b的值,就能知道等差数列前面的数。
dp[i][j]表示以i位置以及j位置为结尾的所有子序列中,最长等差数列子序列的长度。
此时规定了i<j
- 状态转移方程
优化
在dp之前,将<元素,下标数组>绑定在一起,放在哈希表中
-
初始化
dp表中值都初始化为0 -
填表顺序
先固定倒数第一个数,再枚举倒数第二个数 -
返回值
返回dp表里所有元素的和
8.2 代码
class Solution {
public:int numberOfArithmeticSlices(vector<int>& nums) {int n = nums.size();unordered_map<long long,vector<int>> hash;for(int i=0;i<n;i++)hash[nums[i]].push_back(i);vector<vector<int>> dp(n, vector<int>(n));int sum = 0; for (int j = 2; j < n; j++)//固定倒数第一个位置{for (int i = 1; i< j; i++)//枚举倒数第二个数{long long a = (long long)2*nums[i]-nums[j] ;if (hash.count(a)){for(auto k:hash[a]){if(k<i)dp[i][j]+=dp[k][i]+1;}}sum+=dp[i][j];}}return sum ;}
};
有问题请指出,大家一起进步!!!
相关文章:
【动态规划】子序列问题
个人主页 : zxctscl 专栏 【C】、 【C语言】、 【Linux】、 【数据结构】、 【算法】 如有转载请先通知 文章目录 前言1 300. 最长递增子序列(经典)3.1 分析3.2 代码 2 376. 摆动序列2.1 分析2.2 代码 3 673. 最长递增子序列的个数3.1 分析3.…...
【C++】什么是头文件?
在 C 中,头文件(通常以 .h 或 .hpp 为扩展名)是用于声明类、函数、变量、宏和其他代码结构的文件。头文件的主要目的是提供接口定义,使得这些声明可以在多个源文件(.cpp 文件)中共享,从而避免重…...
shell(9)
流程控制(if) 1.if判断 i.基本语法(单分支) if [ 条件判断式 ] then 代码 fi ii.基本语法(多分支) if [ 条件判断式 ] then 代码 elif [ 条件判断式 ] 代码 ...... fi 注意事项:[ 条…...
Java设计模式: 工厂模式与策略模式
Java设计模式: 工厂模式与策略模式 在软件开发领域,设计模式是一种可重复使用的解决方案,用来解决常见的设计问题。工厂模式和策略模式是常用的设计模式之一,它们能够帮助开发人员更好地组织和管理代码,提高代码的可维护性和可扩展…...
大模型微调Fine-tuning:从概念到实践的全面解析
目录 引言 一、什么是大模型微调? 1.1 预训练与微调的区别 1.2 微调的技术演进 二、为什么需要微调? 2.1 解决大模型的固有局限 2.2 微调的优势 三、主流微调方法 3.1 全参数微调 3.2 参数高效微调(PEFT) 四、微调实践指…...
5月5日日记
今天是假期的最后一天,早上爽睡到11点起床。其实九点多就醒了,但是不愿意起来,睡了俩小时又。起来之后就点了外卖,西红柿打卤面两个卤蛋,11块钱很实惠。 起来之后洗袜子,简单策划了一下红色合唱。 给电动…...
TopK题-快速选择方法
代码 class Solution {public int findKthLargest(int[] nums, int k) {//k 就是对应的是下标 n - k 的位置 也就是说我们要的是下标n-k的元素return quickselect(nums, 0, nums.length - 1, nums.length - k);}public int quickselect(int[] nums, int left, int right, int …...
【SpringBoot篇】详解短信验证码登录功能实现
一:需求分析与设计 1.1 发送短信验证码 (1)产品原型 (2)业务逻辑 (3)接口设计 1.2 短信验证码登录 (1)业务逻辑 …...
深入理解 Bash 中的 $‘...‘ 字符串语法糖
在 Bash 脚本编程中,字符串处理是不可或缺的一部分。为了让开发者更高效地处理特殊字符和控制字符,Bash 引入了一种独特的字符串语法糖:$(带单引号的 ANSI-C 风格字符串)。这种语法来源于 C 语言的 ANSI-C 标准&#x…...
机器人强化学习入门学习笔记(二)
基于上一篇的《机器人强化学习入门学习笔记》,在基于 MuJoCo 的仿真强化学习训练中,除了 PPO(Proximal Policy Optimization)之外,还有多个主流强化学习算法可用于训练机器人直行或其他复杂动作。 🧠 一、常见强化学习算法对比(可用于 MuJoCo) 算法类型特点适合场景PP…...
Vue3携手Echarts,打造炫酷数据可视化大屏
一、引言 在数字化时代,数据如同企业的血液,蕴含着巨大的价值。而如何将这些抽象的数据转化为直观、易懂的信息,以便更好地支持决策和展示成果,成为了众多开发者和企业关注的焦点。数据可视化大屏应运而生,它以直观、醒…...
Java Web项目部署指南2025
Java Web项目部署指南 适用场景:本地 Windows 开发打包 → 远程 Ubuntu 服务器部署(2025年最佳实践) 适合人群:Java Web初学者、运维新手、需要一站式部署流程的开发者 🚀 部署流程横向流程图 #mermaid-svg-aznXsajzfU…...
STC单片机与淘晶驰串口屏通讯例程之04【密码登录与修改】
大家好,我是『芯知识学堂』的SingleYork,上一讲笔者给大家介绍了STC单片机与淘晶驰串口屏通讯例程之03【单片机程序解析】,今天笔者要跟大家分享的淘晶驰串口屏的密码登录与密码修改功能的实现。 很多项目中,为了保护某些参数不被随意修改,往往需要增加密码来保护,这也是…...
青听音乐 1.0.6| 全网音乐免费听,无损下载,4条音源,界面简洁无广告
一款强大的音乐播放器,内部集成了相当丰富的功能,可以一键搜索任何想要的歌曲或歌手专辑,同时还支持下载和收藏,拥有非常流畅的速度,使用起来没有任何限制!软件自带有大厂的解析音源,运行非常稳…...
FISCO BCOS【初体验笔记】
飞梭区块链搭建初体验笔记 环境部署创建四个节点的飞梭区块链用的VMware17 centos 7.9 区块链是飞梭2.0用的webase-frontJava环境的正确安装Webase-front搭建 智能合约设计一点合约调试笔记 智能合约abi文件转为go文件后端项目配置相关工具linux常用命令(防忘记&…...
56.[前端开发-前端工程化]Day03-webpack构建工具
邂逅Webpack和打包过程 1 认识webpack工具 前端开发的流程 内置模块path path常见的API 在webpack中的使用 认识webpack 脚手架依赖webpack Webpack到底是什么呢 Webpack官方的图片 Vue项目加载的文件有哪些呢? Webpack的使用前提 Webpack的安装 2 webpack基本打包…...
两次解析格式化字符串 + 使用SQLAlchemy的relationship执行任意命令 -- link-shortener b01lersCTF 2025
题目描述: A fast and reliable link shortener service, with a new feature to add private links! 我们走一遍逻辑 注册 app.route("/register", methods[GET, POST]) def register(): """ 用户注册路由,处理用户注册请求ÿ…...
双目测量中的将视差图重投影成三维坐标图
双目测距主要步骤如下: 左右两张图片 → 匹配 → 得到视差图 disp; 使用 cv2.reprojectImageTo3D(disp, Q) 将视差图 重投影 成三维坐标图 → 得到 points_3d 什么是 points_3d? points_3d cv2.reprojectImageTo3D(disp, Q)points_3d.shap…...
WebAssembly(Wasm):现代Web开发的超级加速器
在当今的Web开发领域,性能和效率是开发者们永恒的追求目标。随着Web应用的复杂度不断增加,传统的JavaScript在某些场景下已经难以满足高性能计算和复杂逻辑处理的需求。此时,WebAssembly(Wasm)作为一种新兴的Web技术&a…...
学习黑客Nmap 命令法诀
筑基期第二重 — Nmap 命令法诀 修炼目标 这一重我们要把上一阶段学到的“神识探查原理”化成 实战招式:掌握日常最常用的 Nmap 命令,并能随心组合。每条命令都配上“修仙比喻”,让你边笑边记。 1. 基础法诀速查表(凡修版…...
基于思考过程评价的心理问题咨询对话记性评估
基于思考过程评价的心理问题咨询对话记性评估 摘要: 在心理问题咨询的对话场景中,传统记性评价多局限于对话结果的相似度计算,无法全面捕捉来访者及咨询师在对话过程中的思维动态。本文提出一种聚焦此对话场景的记性评价新方法,将思考过程纳入评估范畴。详细阐释其基于认知…...
SQL数据库操作大全:从基础到高级查询技巧
大家好,欢迎来到程序视点!我是你们的老朋友.小二! SQL数据库操作核心语法精要 数据库基础操作 创建/删除数据库:CREATE DATABASE / DROP DATABASE 备份SQL Server:使用sp_addumpdevice和BACKUP DATABASE命令 数据库…...
基于MATLAB图像中的圆形目标识别和标记
一、前言 在数字图像处理中,有些图像类别可以使用圆形度进行区分。圆度有时被称为圆形度,其定义为:圆度 4πA / P,其中A是面积,P是周长。这个公式的来源是,对于圆来说,这个值等于1,…...
android-ndk开发(4): linux开发机有线连接android设备
android-ndk开发(4): linux开发机有线连接android设备 2025/05/05 1. 概要 linux 系统, 例如最常见的 ubuntu, 在通过 USB 线把 android 设备连接到开发机上时, 仅仅是 ”物理上的连接”。 这时候 adb 是无法识别到 android 设备的。 需要…...
相机biaoding
需要先安装linux客户端(海康机器人官网),sudo dpkg -i MVS-2.1.2_x86_64_20221208.deb cd /opt/MVS/bin/ 再./MVS.sh运行,客户端启动。 打开海康相机客户端 cd /opt/MVS/bin export LD_LIBRARY_PATH/opt/MVS/bin/:$LD_LIBRARY_PATH ./MVS …...
linux 中inotify与inode的关系是什么?
在 Linux 系统中,inotify 和 inode 是两个密切相关但功能不同的概念,它们共同构成了文件系统的核心机制。以下是它们的关系解析: 一、基本概念 1. inode(索引节点) 定义:inode 是 Linux 文件系统中存储文…...
Paramiko 核心类关系图解析
类图关键说明 SSHClient 核心类 用户主要交互入口,聚合 Transport 对象依赖策略类处理主机密钥验证(AutoAddPolicy/RejectPolicy) Transport 引擎 管理底层连接生命周期组合 AuthHandler 处理认证逻辑组合 KexBase 实现密钥交换可创建多个 C…...
LeetCode算法题 (反转链表)Day17!!!C/C++
https://leetcode.cn/problems/reverse-linked-list/description/ 一、题目分析 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。今天这道题目非常的言简意赅,就是给定一个链表将其反转后返回反转后的头节点。 二、示例分析 输…...
3.5/Q1,GBD数据库最新一区文章解读
文章题目:Global burden of low vision and blindness due to age-related macular degeneration from 1990 to 2021 and projections for 2050 DOI:10.1186/s12889-024-21047-x 中文标题:1990年至2021年因年龄相关性黄斑变性导致的低视力和失…...
【AI论文】像素修补师(PixelHacker):具有结构和语义一致性的图像修复(Image Inpainting)
摘要:图像修复是图像编辑和图像生成之间的一个基础研究领域。 最近最先进的方法(SOTA)探索了新的注意力机制、轻量级架构和上下文感知建模,展示了令人印象深刻的性能。 然而,他们经常在复杂的结构(如纹理、…...
卡洛诗中式西餐,打破“高价即高端”认知
在餐饮消费从“功能满足”向“意义消费”跃迁的今天,Z世代对饮食的期待早已超越“吃饱”的生理需求。萨莉亚原团队成员出来升级孵化的新概念西餐卡洛诗作为中式西餐赛道的破局者,通过场景重构、产品升维与情感绑定,将西餐体验转化为情绪的载体…...
Sui 上线两周年,掀起增长「海啸」
两年前的 5 月 3 日,Sui 的主网正式发布,将在开发网和测试网上验证过的下一代技术承诺变为现实。这一新兴网络旨在优化现有区块链技术,结合高性能计算环境与安全性、可验证性及韧性。 随着 Sui 迎来两周年,这股浪潮已成长为「海啸…...
手写 Vue 源码 === reactive 方法
目录 1. 响应式系统概述 2. Proxy与Reflect的应用 3. 响应式对象的创建 4. WeakMap的使用 主要特点 WeakMap 与 Map 的区别 应用场景 5. 依赖收集与触发更新 6. 响应式标记 7. 性能优化 8. 与Vue2的对比 9. 实际应用示例 10. 总结 Vue3的响应式系统是其核心特性…...
第一章-Rust入门
Rust 简介 Rust 是一种强类型的静态编程语言,它可以编写更快、更可靠的软件,兼备高层次的易用性与低层次的控制力。 Rust 具有以下几个特点: 内存安全,且不牺牲性能“编译通过就能正常运行”令人愉悦的语法和强大的语言特性优秀…...
【AI入门】Cherry入门1:Cherry Studio的安装及配置
前言 尝试了Trae配置MCP,测试了n8n设置MCP工作流,但感觉好累啊,CherryStudio横空出世,开着中文界面,就倍感亲切,看着大家操作很丝滑的样子,咱也鸟枪换炮了,哇哈哈😄&…...
雷电模拟器-超好用的Windows安卓模拟器
一、雷电模拟器介绍 雷电模拟器是一款功能强大的软件,它能够在电脑上模拟出安卓手机系统,让你可以在电脑上运行各类手机应用及游戏。其采用虚拟安卓手机操作界面,为玩家带来了独特的体验。 (一)强大的兼容性 雷电模拟…...
数据集-目标检测系列- 蜥蜴 检测数据集 lizard >> DataBall
数据集-目标检测系列- 蜥蜴 检测数据集 lizard >> DataBall DataBall 助力快速掌握数据集的信息和使用方式。 贵在坚持! * 相关项目 1)数据集可视化项目:gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview…...
Kubernetes控制平面组件:Controller Manager 之 NamespaceController 全方位讲解
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
数据结构小扫尾——栈
数据结构小扫尾——栈 jarringslee 文章目录 数据结构小扫尾——栈栈本质上是一种特殊的线性表。(一)线性表的定义(二)线性表的运算 什么是栈。(一)栈的定义(二)栈的分类࿰…...
策略模式(Strategy Pattern)
🧠 策略模式(Strategy Pattern) 策略模式是一种行为型设计模式,它允许定义一系列的算法或行为,然后将每个算法封装到一个类中,使得它们可以互换。策略模式让算法独立于使用它的客户端进行变化,…...
Qwen2_5-Omni-3B:支持视频、音频、图像和文本的全能AI,可在本地运行
Qwen2.5-Omni-3B是阿里云推出的全能AI模型。它能同时处理视频、音频、图像和文本。只有3B参数,却能在本地运行强大的多模态功能。 近日,已经在Hugging Face上发布。它是小型多模态AI系统的重要突破。 特点 Qwen2.5-Omni-3B与普通语言模型不同。它是真正的多模态系统,可以同…...
GZIPOutputStream 类详解
GZIPOutputStream 类详解 GZIPOutputStream 是 Java 中用于压缩数据为 GZIP 格式的输出流类,属于 java.util.zip 包。它是 DeflaterOutputStream 的子类,专门生成符合 GZIP 格式(.gz 文件)的压缩数据。 1. 核心功能 将数据压缩为…...
sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama解释这行代码的含义
这行命令用于为 OLLAMA 服务创建专用的系统用户,具体参数解析如下: sudo 以管理员权限执行命令,确保有足够权限创建系统用户。 useradd Linux 用户创建命令,用于在系统中新增用户。 -r 创建系统账户(非登录用户&…...
自注意力(Self-Attention)和位置编码
自注意力 给定序列 x 1 , … , x n \mathbf{x}_1, \ldots, \mathbf{x}_n x1,…,xn, ∀ x i ∈ R d \forall \mathbf{x}_i \in \mathbb{R}^d ∀xi∈Rd 自注意力池化层将 x i \mathbf{x}_i xi 当做key, value, query来对序列抽取特征得到 y 1 , … , y n \mathbf{y}…...
Linux压缩和解压类
一、gzip/gunzip 压缩 1、基本语法 gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件) gunzip 文件.gz (功能描述:解压缩文件命令) 2、经验技巧 (1&#…...
Kubernetes控制平面组件:Controller Manager详解
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
使用 JavaScript 实现数据导出为 Excel 和 CSV 文件
在 Web 开发中,经常会遇到需要将数据导出为文件的需求,例如将数据导出为 Excel 或 CSV 文件。今天,我们就来探讨如何使用 JavaScript 实现这一功能。 一、实现思路 我们通过 HTML 创建一个按钮,点击按钮时,触发 Java…...
设一个测试情境,新用户注册后显示的名字不完整,测试思路是怎么样的?
问题分析:新用户注册后显示名称不完整 典型表现:用户注册时输入"张三丰",系统仅显示"张"或"张三"等不完整信息 一、测试排查思维导图 二、详细测试方案 1. 前端测试 输入验证: 测试不同长度名称(1字符/10字符/50字符) 测试含空格名称(如…...
NHANES指标推荐:ZJU index
文章题目:Association between ZJU index and gallstones in US adult: a cross-sectional study of NHANES 2017-2020 DOI:10.1186/s12876-024-03553-9 中文标题:ZJU指数与美国成年人胆结石的关联:2017-2020年NHANES横断面研究 发…...
数据存储——高级存储之PV和PVC
一、概述 PV ( Persistent Volume )是持久化卷的意思,是对底层的共享存储的一种抽象。一般情况下 PV 由 kubernetes 管理员进行创建和配置,它与底层具体的共享存储技术有关,并通过插件完成与共享存储的对接。 PVC &a…...