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

动态规划之股票问题大总结

参考资料:代码随想录 (programmercarl.com)

一、只能买卖一次

题目链接:121. 买卖股票的最佳时机 - 力扣(LeetCode)

算法思想:

设置两种状态:0表示已持有股票,1表示未持有股票
1.dp[i][0]表示第i天已持有股票时,获得的最大利润
dp[i][1]表示第i天未持有股票时,获得的最大利润
2.递推式:
对于dp[i][0]:
若第i-1天已持有股票,则dp[i][0]=dp[i-1][0];
若第i-1天未持有股票,则dp[i][0]=0-prices[i];
综上,dp[i][0]=fmax(dp[i-1][0],-prices[i]);
对于dp[i][1]:
若第i-1天未持有股票,则dp[i][1]=dp[i-1][1];
若第i-1天已持有股票,则dp[i][1]=dp[i-1][0]+prices[i];
综上:dp[i][1]=fmax(dp[i-1][1],dp[i-1][0]+prices[i]);
3.初始化:
dp[0][0]=-prices[0];

算法实现:

int maxProfit(int *prices,int pricesSize){//设置两种状态:0表示已持有股票,1表示未持有股票//1.dp[i][0]表示第i天已持有股票时,获得的最大利润//dp[i][1]表示第i天未持有股票时,获得的最大利润//2.递推式://对于dp[i][0]://      若第i-1天已持有股票,则dp[i][0]=dp[i-1][0];//      若第i-1天未持有股票,则dp[i][0]=0-prices[i];//综上,dp[i][0]=fmax(dp[i-1][0],-prices[i]);//对于dp[i][1]://      若第i-1天未持有股票,则dp[i][1]=dp[i-1][1];//      若第i-1天已持有股票,则dp[i][1]=dp[i-1][0]+prices[i];//综上:dp[i][1]=fmax(dp[i-1][1],dp[i-1][0]+prices[i]);//3.初始化://dp[0][0]=-prices[0];int dp[pricesSize][2];memset(dp,0,sizeof(dp));dp[0][0]=-prices[0];for(int i=1;i<pricesSize;i++){dp[i][0]=fmax(dp[i-1][0],-prices[i]);dp[i][1]=fmax(dp[i-1][1],dp[i-1][0]+prices[i]);}return dp[pricesSize-1][1];
}

二、可以买卖多次

题目链接:122. 买卖股票的最佳时机 II - 力扣(LeetCode)

算法思想:

设置两种状态:0表示已持有股票,1表示未持有股票
1.dp[i][0]表示第i天已持有股票时,获得的最大利润
dp[i][1]表示第i天未持有股票时,获得的最大利润
2.递推式:
对于dp[i][0]:
若第i-1天已持有股票,则dp[i][0]=dp[i-1][0];
若第i-1天未持有股票,则dp[i][0]=dp[i-1][1]-prices[i];
综上,dp[i][0]=fmax(dp[i-1][0],dp[i-1][1]-prices[i]);
(II与I的唯一区别就在于:
只允许一次购买时,在持有股票之前,所获得利润必为0,而允许多次购买则不然)
对于dp[i][1]:
若第i-1天未持有股票,则dp[i][1]=dp[i-1][1];
若第i-1天已持有股票,则dp[i][1]=dp[i-1][0]+prices[i];
综上:dp[i][1]=fmax(dp[i-1][1],dp[i-1][0]+prices[i]);
3.初始化:
dp[0][0]=-prices[0];

算法实现:

int maxProfitII(int *prices,int pricesSize){//设置两种状态:0表示已持有股票,1表示未持有股票//1.dp[i][0]表示第i天已持有股票时,获得的最大利润//dp[i][1]表示第i天未持有股票时,获得的最大利润//2.递推式://对于dp[i][0]://      若第i-1天已持有股票,则dp[i][0]=dp[i-1][0];//      若第i-1天未持有股票,则dp[i][0]=dp[i-1][1]-prices[i];//综上,dp[i][0]=fmax(dp[i-1][0],dp[i-1][1]-prices[i]);//(II与I的唯一区别就在于://        只允许一次购买时,在持有股票之前,所获得利润必为0,而允许多次购买则不然)//对于dp[i][1]://      若第i-1天未持有股票,则dp[i][1]=dp[i-1][1];//      若第i-1天已持有股票,则dp[i][1]=dp[i-1][0]+prices[i];//综上:dp[i][1]=fmax(dp[i-1][1],dp[i-1][0]+prices[i]);//3.初始化://dp[0][0]=-prices[0];int dp[pricesSize][2];memset(dp,0,sizeof(dp));dp[0][0]=-prices[0];for(int i=1;i<pricesSize;i++){dp[i][0]=fmax(dp[i-1][0],dp[i-1][1]-prices[i]);dp[i][1]=fmax(dp[i-1][1],dp[i-1][0]+prices[i]);}return dp[pricesSize-1][1];
}

三、最多买卖两次

题目链接:123. 买卖股票的最佳时机 III - 力扣(LeetCode)

算法思想:

设置四种状态:
0表示第一次已持有股票
1表示第一次未持有股票
2表示第二次已持有股票
3表示第二次未持有股票
1.dp[i][0]表示第i天第一次已持有股票时,获得的最大利润
dp[i][1]表示第i天第一次未持有股票时,获得的最大利润
dp[i][2]表示第i天第二次已持有股票时,获得的最大利润
dp[i][3]表示第i天第二次未持有股票时,获得的最大利润
2.递推式:
对于dp[i][0]:
若第i-1天第一次已持有股票,则dp[i][0]=dp[i-1][0];
若第i-1天第一次未持有股票,则dp[i][0]=0-prices[i];
综上,dp[i][0]=fmax(dp[i-1][0],-prices[i]);
对于dp[i][1]:
若第i-1天第一次未持有股票,则dp[i][1]=dp[i-1][1];
若第i-1天第一次已持有股票,则dp[i][1]=dp[i-1][0]+prices[i];
综上,dp[i][1]=fmax(dp[i-1][1],dp[i-1][0]+prices[i]);
对于dp[i][2]:
若第i-1天第一次已持有股票,则dp[i][2]=dp[i-1][2];
若第i-1天第一次未持有股票,则dp[i][2]=dp[i-1][1]-prices[i];
综上,dp[i][2]=fmax(dp[i-1][2],dp[i-1][1]-prices[i]);
对于dp[i][3]:
若第i-1天第一次未持有股票,则dp[i][3]=dp[i-1][3];
若第i-1天第一次已持有股票,则dp[i][3]=dp[i-1][2]+prices[i];
综上:dp[i][3]=fmax(dp[i-1][3],dp[i-1][2]+prices[i]);
3.初始化:
dp[0][0]=dp[0][2]=-prices[0];

算法实现:

int maxProfitIII(int *prices,int pricesSize){//设置四种状态://    0表示第一次已持有股票//    1表示第一次未持有股票//    2表示第二次已持有股票//    3表示第二次未持有股票//1.dp[i][0]表示第i天第一次已持有股票时,获得的最大利润//dp[i][1]表示第i天第一次未持有股票时,获得的最大利润//dp[i][2]表示第i天第二次已持有股票时,获得的最大利润//dp[i][3]表示第i天第二次未持有股票时,获得的最大利润//2.递推式://对于dp[i][0]://      若第i-1天第一次已持有股票,则dp[i][0]=dp[i-1][0];//      若第i-1天第一次未持有股票,则dp[i][0]=0-prices[i];//综上,dp[i][0]=fmax(dp[i-1][0],-prices[i]);//对于dp[i][1]://      若第i-1天第一次未持有股票,则dp[i][1]=dp[i-1][1];//      若第i-1天第一次已持有股票,则dp[i][1]=dp[i-1][0]+prices[i];//综上,dp[i][1]=fmax(dp[i-1][1],dp[i-1][0]+prices[i]);//对于dp[i][2]://      若第i-1天第一次已持有股票,则dp[i][2]=dp[i-1][2];//      若第i-1天第一次未持有股票,则dp[i][2]=dp[i-1][1]-prices[i];//综上,dp[i][2]=fmax(dp[i-1][2],dp[i-1][1]-prices[i]);//对于dp[i][3]://      若第i-1天第一次未持有股票,则dp[i][3]=dp[i-1][3];//      若第i-1天第一次已持有股票,则dp[i][3]=dp[i-1][2]+prices[i];//综上:dp[i][3]=fmax(dp[i-1][3],dp[i-1][2]+prices[i]);//3.初始化://dp[0][0]=dp[0][2]=-prices[0];int dp[pricesSize][4];memset(dp,0,sizeof(dp));dp[0][0]=dp[0][2]=-prices[0];for(int i=1;i<pricesSize;i++){dp[i][0]=fmax(dp[i-1][0],-prices[i]);dp[i][1]=fmax(dp[i-1][1],dp[i-1][0]+prices[i]);dp[i][2]=fmax(dp[i-1][2],dp[i-1][1]-prices[i]);dp[i][3]=fmax(dp[i-1][3],dp[i-1][2]+prices[i]);}return dp[pricesSize-1][3];
}

四、最多买卖k次

题目链接:188. 买卖股票的最佳时机 IV - 力扣(LeetCode)

算法思想:

设置2*k种状态:
for j=1 to k
2*j-1表示第j次已持有股票
2*j+1表示第j次未持有股票
1.dp[i][2*j-1]表示第i天第j次已持有股票时,获得的最大利润
dp[i][2*j]表示第i天第j次未持有股票时,获得的最大利润
2.递推式:
对于dp[i][2*j-1]:
若第i-1天第j次已持有股票,则dp[i][2*j-1]=dp[i-1][2*j-1];
若第i-1天第j次未持有股票,则dp[i][2*j-1]=dp[i-1][2*j-2]-prices[i];
综上,dp[i][2*j-1]=fmax(dp[i-1][2*j-1],dp[i-1][2*j-2]-prices[i]);
对于dp[i][2*j]:
若第i-1天第j次未持有股票,则dp[i][2*j]=dp[i-1][2*j];
若第i-1天第j次已持有股票,则dp[i][2*j]=dp[i-1][2*j-1]+prices[i];
综上,dp[i][2*j]=fmax(dp[i-1][2*j],dp[i-1][2*j-1]+prices[i]);
3.初始化:
for(int i=1;i<=2*k;i+=2) dp[0][i]=-prices[0];

算法实现:(实际上就是在三的基础上,从2次买卖延伸到了k次买卖,用for循环即可)

int maxProfitIV(int k,int *prices,int pricesSize){//设置2*k种状态://    for j=1 to k//      2*j-1表示第j次已持有股票//      2*j+1表示第j次未持有股票//1.dp[i][2*j-1]表示第i天第j次已持有股票时,获得的最大利润//dp[i][2*j]表示第i天第j次未持有股票时,获得的最大利润//2.递推式://对于dp[i][2*j-1]://      若第i-1天第j次已持有股票,则dp[i][2*j-1]=dp[i-1][2*j-1];//      若第i-1天第j次未持有股票,则dp[i][2*j-1]=dp[i-1][2*j-2]-prices[i];//综上,dp[i][2*j-1]=fmax(dp[i-1][2*j-1],dp[i-1][2*j-2]-prices[i]);//对于dp[i][2*j]://      若第i-1天第j次未持有股票,则dp[i][2*j]=dp[i-1][2*j];//      若第i-1天第j次已持有股票,则dp[i][2*j]=dp[i-1][2*j-1]+prices[i];//综上,dp[i][2*j]=fmax(dp[i-1][2*j],dp[i-1][2*j-1]+prices[i]);//3.初始化://for(int i=1;i<=2*k;i+=2) dp[0][i]=-prices[0];int dp[pricesSize][2*k+1];memset(dp,0,sizeof(dp));for(int i=1;i<=2*k;i+=2)dp[0][i]=-prices[0];for(int i=1;i<pricesSize;i++){for(int j=1;j<=k;j++){dp[i][2*j-1]=fmax(dp[i-1][2*j-1],dp[i-1][2*j-2]-prices[i]);dp[i][2*j]=fmax(dp[i-1][2*j],dp[i-1][2*j-1]+prices[i]);}}return dp[pricesSize-1][2*k];
}

五、买卖多次,卖出有一天冷冻期

题目链接:309. 最佳买卖股票时机含冷冻期 - 力扣(LeetCode)

算法思想:

设置三种状态:
0表示已持有股票
1表示未持有股票且处于非冷冻状态
2表示未持有股票且处于冷冻状态
1.dp[i][0]表示第i天已持有股票时,获得的最大利润
dp[i][1]表示第i天未持有股票且处于非冷冻状态时,获得的最大利润
dp[i][2]表示第i天未持有股票且处于冷冻状态时,获得的最大利润
2.递推式:
对于dp[i][0]:
若第i-1天已持有股票,则dp[i][0]=dp[i-1][0];
若第i-1天未持有股票,必为非冷冻状态,则dp[i][0]=dp[i-1][1]-prices[i];
综上,dp[i][0]=fmax(dp[i-1][0],dp[i-1][1]-prices[i]);
对于dp[i][1]:
第i-1天必未持有股票
若第i-1天未持有股票且处于非冷冻状态,则dp[i][1]=dp[i-1][1];
若第i-1天未持有股票且处于冷冻状态,则dp[i][1]=dp[i-1][2];
综上:dp[i][1]=fmax(dp[i-1][1],dp[i-1][2]);
对于dp[i][2]:
第i-1天必已持有股票,则dp[i][2]=dp[i-1][0]+prices[i];
3.初始化:
dp[0][0]=-prices[0];

算法实现:

int maxProfitV(int *prices,int pricesSize){//设置三种状态://      0表示已持有股票//      1表示未持有股票且处于非冷冻状态//      2表示未持有股票且处于冷冻状态//1.dp[i][0]表示第i天已持有股票时,获得的最大利润//dp[i][1]表示第i天未持有股票且处于非冷冻状态时,获得的最大利润//dp[i][2]表示第i天未持有股票且处于冷冻状态时,获得的最大利润//2.递推式://对于dp[i][0]://      若第i-1天已持有股票,则dp[i][0]=dp[i-1][0];//      若第i-1天未持有股票,必为非冷冻状态,则dp[i][0]=dp[i-1][1]-prices[i];//综上,dp[i][0]=fmax(dp[i-1][0],dp[i-1][1]-prices[i]);//对于dp[i][1]://      第i-1天必未持有股票//      若第i-1天未持有股票且处于非冷冻状态,则dp[i][1]=dp[i-1][1];//      若第i-1天未持有股票且处于冷冻状态,则dp[i][1]=dp[i-1][2];//综上:dp[i][1]=fmax(dp[i-1][1],dp[i-1][2]);//对于dp[i][2]://      第i-1天必已持有股票,则dp[i][2]=dp[i-1][0]+prices[i];//3.初始化://dp[0][0]=-prices[0];int dp[pricesSize][3];memset(dp,0,sizeof(dp));dp[0][0]=-prices[0];for(int i=1;i<pricesSize;i++){dp[i][0]=fmax(dp[i-1][0],dp[i-1][1]-prices[i]);dp[i][1]=fmax(dp[i-1][1],dp[i-1][2]);dp[i][2]=dp[i-1][0]+prices[i];}return fmax(dp[pricesSize-1][1],dp[pricesSize-1][2]);
}

六、买卖多次,卖出有手续费

题目链接:714. 买卖股票的最佳时机含手续费 - 力扣(LeetCode)

算法思想:(同二)

算法实现:(如果掌握了二,那么这题就不用看)

int maxProfitVI(int *prices,int pricesSize,int fee){//设置两种状态:0表示已持有股票,1表示未持有股票//1.dp[i][0]表示第i天已持有股票时,获得的最大利润//dp[i][1]表示第i天未持有股票时,获得的最大利润//2.递推式://对于dp[i][0]://      若第i-1天已持有股票,则dp[i][0]=dp[i-1][0];//      若第i-1天未持有股票,则dp[i][0]=dp[i-1][1]-prices[i];//综上,dp[i][0]=fmax(dp[i-1][0],dp[i-1][1]-prices[i]);//对于dp[i][1]://      若第i-1天未持有股票,则dp[i][1]=dp[i-1][1];//      若第i-1天已持有股票,则dp[i][1]=dp[i-1][0]+prices[i]-fee;//综上:dp[i][1]=fmax(dp[i-1][1],dp[i-1][0]+prices[i]-fee);//3.初始化://dp[0][0]=-prices[0];int dp[pricesSize][2];memset(dp,0,sizeof(dp));dp[0][0]=-prices[0];for(int i=1;i<pricesSize;i++){dp[i][0]=fmax(dp[i-1][0],dp[i-1][1]-prices[i]);dp[i][1]=fmax(dp[i-1][1],dp[i-1][0]+prices[i]-fee);}return dp[pricesSize-1][1];
}

相关文章:

动态规划之股票问题大总结

参考资料&#xff1a;代码随想录 (programmercarl.com)一、只能买卖一次题目链接&#xff1a;121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09;算法思想&#xff1a;设置两种状态:0表示已持有股票&#xff0c;1表示未持有股票1.dp[i][0]表示第i天已持有股票时&…...

我来跟你讲vue进阶

一、组件&#xff08;重点&#xff09; 组件&#xff08;Component&#xff09;是 Vue.js 最强大的功能之一。 组件可以扩展 HTML 元素&#xff0c;封装可重用的代码。 组件系统让我们可以用独立可复用的小组件来构建大型应用&#xff0c;几乎任意类型的应用的界面都可以抽象…...

#847(Div3)E. Vlad and a Pair of Numbers

原题链接&#xff1a; E. Vlad and a Pair of Numbers 题意&#xff1a; 题目有公式 a⊕b(ab)/2xa ⊕ b (a b) / 2 xa⊕b(ab)/2x&#xff0c; 给你的是 xxx&#xff0c;让输出一组满足题目要求的 a&#xff0c;ba&#xff0c;ba&#xff0c;b&#xff0c;没有就输出−1-1…...

怎么把pdf转换成图片?这个方法你值得拥有

想要高效率的工作&#xff0c;除了需要大家合理安排时间之外&#xff0c;一些能够辅助高效工作的工具也是必不可少的。就拿要把一份pdf文件转换成若干图片来说&#xff0c;如果不知道方法&#xff0c;找不到合适的转换工具&#xff0c;那么想要完成这一任务&#xff0c;势必要花…...

go语言使用append向二维数组添加一维数组

var ans [][]int ans append(ans, append([]int(nil), nums...))&#xff08;正确写法&#xff09;需要注意的是&#xff0c;为了避免对原切片造成影响&#xff0c;代码在将当前排列追加到结果数组 ans 时&#xff0c;使用了 append(ans, append([]int(nil), nums…)) 的方式…...

YOLOv5训练大规模的遥感实例分割数据集 iSAID从切图到数据集制作及训练

最近想训练遥感实例分割&#xff0c;纵观博客发现较少相关 iSAID数据集的切分及数据集转换内容&#xff0c;思来想去应该在繁忙之中抽出时间写个详细的教程。 iSAID数据集下载 iSAID数据集链接 下载上述数据集。 百度网盘中的train和val中包含了实例和语义分割标签。 上述…...

js学习5(函数)

目录 定义函数 函数的特性 使用函数模拟类 模拟私有属性和方法 闭包 函数特性利用 箭头函数 定义函数 function func1(name) { console.log(name); } func2 function (name) { console.log(name); } func3 function func0(name) { console.log(name); } co…...

用Qt画一个仪表盘

关于Qt Qt是一个跨平台的C图形用户界面应用程序框架&#xff0c;通过使用Qt&#xff0c;可以快速开发出跨平台的多平台应用程序&#xff0c;包括Windows、Mac OS X、Linux和其他Unix系统。Qt提供了强大的图形操作界面&#xff08;GUI&#xff09;程序开发和移植的能力&#xf…...

linux 端口查询命令

任何知识都是用进废退&#xff0c;有段时间没摸linux&#xff0c;这大脑里的知识点仿佛全部消失了&#xff0c;就无语。 索性&#xff0c;再写一篇记录&#xff0c;加强一下记忆&#xff0c;下次需要就看自己的资料好了。lsof命令Linux端口查询命令可以通过lsof实现&#xff1a…...

C语言函数: 字符串函数及模拟实现strtok()、strstr()、strerror()

C语言函数&#xff1a; 字符串函数及模拟实现strtok()、strstr()、strerror() strstr()函数: 作用&#xff1a;字符串查找。在一串字符串中&#xff0c;查找另一串字符串是否存在。 形参: str2在str1中寻找。返回值是char*的指针 原理&#xff1a;如果在str1中找到了str2&…...

【学习笔记】人工智能哲学研究:《心智、语言和机器》

关于人工智能哲学&#xff0c;我曾在这篇文章里 【脑洞大开】从哲学角度看人工智能&#xff1a;介绍徐英瑾的《心智、语言和机器》 做过介绍。图片来源&#xff1a;http://product.dangdang.com/29419969.html在我完成了一些人工智能相关的工作以后&#xff0c;我再来分享《心智…...

设计模式之门面模式(外观模式)

目录 1.模式定义 2.应用场景 2.1 电源总开关例子 2.2 股民炒股场景 ​编辑 3. 实例如下 4. 门面模式的优缺点 传送门&#xff1a; 项目中用到的责任链模式 给对象讲工厂模式&#xff0c;必须易懂易会 策略模式&#xff0c;工作中你用上了吗&#xff1f; 1.模式定…...

MySQL - 多表查询

目录1. 多表查询示例2. 多表查询分类2.1 等/非等值连接2.1.1 等值连接2.1.2非等值连接2.2 自然/非自然连接2.3 内/外连接2.3.1 内连接2.3.2 外连接3.UNION的使用3.1 合并查询结果3.1.1 UNION操作符3.1.2 UNION ALL操作符4. 7种JOIN操作5. join 多张表多表查询&#xff0c;也称为…...

自定义报表是什么?

自定义报表是指根据用户的需求和要求&#xff0c;自行设计和生成的报表。自定义报表可以根据用户的具体需求&#xff0c;选择需要的数据和指标&#xff0c;进行灵活的排列和组合&#xff0c;生成符合用户要求的报表。自定义报表可以帮助用户更好地了解业务情况&#xff0c;发现…...

windows安装docker-小白用【避坑】【伸手党福利】

目录实操开启 Hyper-V 和容器特性下载docker安装dockercmd中&#xff0c;使用命令测试是否成功报错解决办法&#xff1a;下载linux模拟器wsl&#xff1a;双击打开docker重新打开cmd&#xff0c;输入命令&#xff0c;成功显示sever和clinet实操 开启 Hyper-V 和容器特性 控制面…...

环形链表相关的练习

目录 一、相交链表 二、环形链表 三、环形链表 || 一、相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据…...

C++ 提示对话框

头文件 #include<iostream>#include<cstdio> using namespace std; 函数格式 MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) 参数 hWnd &#xff1a;此参数代表消息框拥有的窗口。如果为NULL&#xff0c;则消息框没有拥有窗口。 lp…...

SprintBoot打包及profile文件配置

打成Jar包 需要添加打包组件将项目中的资源、配置、依赖包打到一个jar包中&#xff0c;可以使用maven的package&#xff1b;运行: java -jar xxx(jar包名) 操作步骤 第一步: 引入Spring Boot打包插件 <!--打包的插件--> <build><!--修改jar的名字--><fi…...

java面试-java集合

说说你如何选用集合&#xff1f; 需要键值对选用 map 接口下的集合&#xff0c;需要排序用 TreeMap, 不需要排序用 HashMap 不需要键值对仅存放元素则选择 Collection 下实现的接口&#xff0c;保证元素唯一使用 Set, 不需要则选用 List Collection 和 Collections 有什么区别…...

Node.js简介

客户端访问网页时向服务器端发送请求要访问服务器中的页面&#xff0c;服务器收到请求后向数据库中进行搜索&#xff0c;搜索到相关数据然后返回结果给客户端显示&#xff1b; 这个过程就类似于&#xff1a;客人&#xff08;客户端&#xff09;去饭馆&#xff08;服务端&#…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...